Batch file |此时在Windows 7中出现意外情况
这是我的批处理文件Batch file |此时在Windows 7中出现意外情况,batch-file,Batch File,这是我的批处理文件 @echo off set /a IPCOUNT=1 set IP_FILTER=^IPV4 for /f "tokens=1,2,3 delims=:" %%i in ('2^>nul ipconfig | findstr /i "!IP_FILTER!" | findstr /v "%"') do ( if "%%j" NEQ " 127.0.0.1" ( echo !IPCOUNT! %%j set IP_CHECK=%%j echo
@echo off
set /a IPCOUNT=1
set IP_FILTER=^IPV4
for /f "tokens=1,2,3 delims=:" %%i in ('2^>nul ipconfig | findstr /i "!IP_FILTER!" | findstr /v "%"') do (
if "%%j" NEQ " 127.0.0.1" (
echo !IPCOUNT! %%j
set IP_CHECK=%%j
echo !IP_CHECK!>>"%REGULAR_IP_FILE%"
set /a IPCOUNT+=1
)
)
运行此代码时,出现以下错误:
| was unexpected at this time.
我怎样才能解决这个问题呢?事实上,这个话题有很多重复的地方。然而,我的回答是帮助你学习,因为你实际上犯了相当多的错误 固定代码如下:
@echo关闭
setlocal EnableDelayedExpansion
设置“IPcount=1”
设置“IP_筛选器=IPV4”
对于/F“tokens=2 delims=:”%A in('2^>numipconfig^| findstr/IRC:%IP_filter%”)do(
对于(“%%A”)中的/F“令牌=*”%%B,请执行以下操作(
如果不是“%%B”==“127.0.0.1”(
echo!IPcount!%%B
(echo%%B)>>%REGULAR\u IP\u文件%
设置/a“IPcount+=1”
)
)
)
- 我已经启用了。您似乎在文件中使用了它,但尚未启用它
- 只是把一些字母改成小写。(轻微改善)
- 您似乎想要找到您的IPv4地址。我已经修改了你的脚本以添加更好的方法。请注意,
(不区分大小写)在行首是而不是。行的开头有一个空格,所以我删除了IPv4
,但保持了regex的启用状态^
- 还做了一些小的改进,例如删除了设置变量的无用行,并使用了/F变量的
。此外,还添加了括号,以确保追加是安全的
- 相当重要的事情;将其用于最佳实践:引用
变量和值,格式为set
set(/a)“var=value”
;
更改为^
。您处于for
循环中,因此需要用^
>>^ ^<^<
转义
,因为
是在更高优先级中执行的。我现在确实很困惑。为什么您需要这个findstr/V“%”
?另外,您似乎喜欢使用正则表达式(string^IPV4
)。为什么不在findstr
中启用它呢?在使用findstr/V“%”查找%
时,如果没有Setlocal EnableDelayedExpansion
,就不能使用findstr/i”!IP\u FILTER!
在批处理文件中实际写入findstr/V“%%”的符号…最后的注释集(/a)
在/a
周围加括号是什么?@GerhardBarnard如果set
有一个/a
选项,也可以这样做。我不会在/a
周围加括号,因为OP可能会感到困惑,但不管set/a
是否需要双引号,事实上,我建议不要在set/a