我试图在文件中找到一个字符串“blabla”。如果我找到了字符串,我将用“bloblo”替换它,否则什么都不做。我想对文件夹中的所有文件执行此操作。
当我将脚本应用于一个文件时,它运行良好。当我使用 for 循环时,它不起作用。它不会进入 for 循环内部
这是我的脚本:
set "Var1=blabla"
set "Var2=bloblo"
FOR %%i IN (C:\Users\UserName\Desktop\TEST\*.txt) DO (
find /c "%Var1%" %%i
if %errorlevel% equ 1 goto notfound
call PathFile\FUNCTION_REPLACE.cmd %Var1% %Var2% %%i
:notfound
)
我使用脚本“Function_replace”来替换值,这里是脚本:
SetLocal EnableExtensions DisableDelayedExpansion
Set "search=%~1"
Set "replace=%2"
Set "File=%3"
For /F "Tokens=1*Delims=]" %%A In ('Find /V /N ""^<"%File%"^&Break^>"%File%"'
)Do (Set "line=%%B"
SetLocal EnableDelayedExpansion
(If Not "%%B"=="" (Echo(!line:%search%=%replace%!)Else Echo()>>"%File%"
EndLocal)
我曾经直接使用我文件夹中每个文件的替换函数调用。但是进入每个文件需要很长时间。这就是为什么我想在进入每个文件之前检查字符串是否存在(通过使用 find /c)。
你能看出问题出在哪里吗?
根据您的最新编辑,这里有一个示例,它仅将包含要替换的字符串的文件发送到子函数:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "search=%~1"
Set "replace=%~2"
For /F Delims^=^ EOL^= %%A In ('FindStr /LIMP "%search%" *.*')Do Call :Sub "%%A"
GoTo :EOF
:Sub
Set "File=%~1"
For /F "Tokens=1*Delims=]" %%A In ('Find /V /N ""^<"%File%"^&Break^>"%File%"'
)Do (Set "line=%%B"
SetLocal EnableDelayedExpansion
(If Not "%%B"=="" (Echo(!line:%search%=%replace%!)Else Echo()>>"%File%"
EndLocal)
请注意,该FindStr
命令仅使用示例选项,而该/M
选项对本解决方案很重要,您应该检查输出FindStr /?
以确定您认为最合适的其他选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句