【发布时间】:2020-06-24 09:06:22
【问题描述】:
我正在尝试替换某些文件中的一行(基于文件扩展名)。该程序未按预期运行,导致问题的命令是以下命令。
FOR /F %%k IN ('TYPE !FILE! ^| FINDSTR /N "^"') DO (
这会返回以下错误:
FINDSTR: No search strings 进程试图写入一个不存在的 管道。
但是,在命令行中运行时,命令本身可以正常工作。我已经花了将近一整天的时间,但无济于事。
FOR /F %k IN ('TYPE <filename> ^| FINDSTR /N "^"') DO echo(%k
我们将不胜感激!
下面提供完整代码供参考。
@echo off
CD data
FOR /F "delims=" %%i IN ('DIR *.ext1 /B') DO (
SET "FILE=%%i"
SETLOCAL EnableDelayedExpansion
echo(!FILE!
<!FILE! >!FILE!.tmp~ (
REM Find line number on which Logon command is found
FOR /F "tokens=1,* delims=: " %%j IN ('FINDSTR /I /N /R "^\.LOGON.*" !FILE!') DO (
SET "NUM=%%j"
)
REM Print all lines along with line number at beginning
FOR /F %%k IN ('TYPE !FILE! ^| FINDSTR /N "^"') DO (
SET "LINE=%%k"
REM Replace entire content of Logon line with Run file command
FOR /F "tokens=1,* delims=:" %%l IN ("!LINE!") DO IF %%l EQU !NUM! (
echo(.RUN FILE logon.txt;
) ELSE (
echo(!LINE:*:=!
)
)
)
MOVE /Y "!FILE!.tmp~" !%FILE!"
ENDLOCAL
)
CD ..
【问题讨论】:
-
也许尝试用
('FINDSTR /N "^" !FILE!')替换('TYPE !FILE! ^| FINDSTR /N "^"')。 -
@PhilBrubaker,这不会改变任何事情;问题是启用了延迟扩展,即使引用了
^,它也会消耗它......
标签: windows batch-file cmd delayedvariableexpansion