FIND命令的批处理问题

时间:2016-06-17 23:55:15

标签: batch-file

我试图让测试代码正常工作,因此我可以根据实际需要制作更复杂的脚本版本,但我正在努力寻找FIND命令。

我的代码:

@echo off
SETLOCAL DISABLEDELAYEDEXPANSION

>"%~dpn1_b.txt" (
  FOR /F "tokens=1* delims=]" %%j in ('find /V /N "" %1') DO (
    SET "currentLine=%%k"
    SETLOCAL ENABLEDELAYEDEXPANSION
    IF "!currentLine:~0,3!"=="12/" (
      SET string=!currentLine:~0,2!!currentLine:~3,4!
      FIND "%string%" 111.txt > nul
      IF %errorlevel% EQU 0 (SET "currentLine=!currentLine:~0,2!!currentLine:~3!")
    )
    ECHO(!currentline!
    ENDLOCAL
  )
)

这是通过将test.txt拖到批处理文件上来执行的。

111.txt保存123456. test.txt在第一行有12/3456,在第二行有12/4456。该脚本应该从第一行删除斜杠而不是从第二行删除斜杠。知道出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

FOR循环体内,所有使用%var%格式的环境变量扩展都将进行预扩展。即使对于!var!等内部变量,您仍需要使用延迟展开errorlevel格式。

FOR /F ... (
    ...
    FIND "!string!" 111.txt > nul
    IF !errorlevel! EQU 0 (SET "currentLine=!currentLine:~0,2!!currentLine:~3!")
)

正如Ryan所提到的,如果您启用ECHO,则会更清楚,因为您看到原始代码中循环中的最后两个语句是预扩展的:

  

查找“”111.txt 1> nul

     

IF 0 EQU 0(SET“currentLine =!currentLine:~0,2 !! currentLine:~3!”)

答案 1 :(得分:0)

有趣的是:你得到行号(%%j),但不要使用它......

怎么样:

...
if "%%j"=="[1" (
  ...
) else (
  echo %%k
)
...