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