我试图让测试代码正常工作,因此我可以根据实际需要制作更复杂的脚本版本,但我正在努力寻找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。该脚本应该从第一行删除斜杠而不是从第二行删除斜杠。知道出了什么问题吗?
答案 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
)
...