知道为什么这不起作用?我正在尝试创建一个文件扫描其当前目录中的所有批处理文件以获取特定字符串(123456),如果找到则继续执行:end。如果未找到,则文件应将其自身复制到扫描的文件中并继续扫描下一个文件。任何想法和提示表示赞赏!干杯!
for %%f in (*.bat) do (
set A=%%f
set file=%A%
findstr "123456" %file%
if %errorlevel%==0 goto end
copy %0 %A%
)
:end
我测试了以下代码:
SETLOCAL EnableExtensions EnableDelayedExpansion
for %%f in (*.bat) do (
set A=%%~f
set file=%A%
findstr "123456" %file%
if %errorlevel%==0 goto end
copy %0 %A%
)
:end
并且代码没有执行goto end命令。输出如下:
C:\Users\Epidex98\Desktop\routine>(
set A=ir.bat
set file=
findstr "123456"
if 0 == 0 goto end
copy "C:\Users\Epidex98\Desktop\routine\ir.bat"
)
答案 0 :(得分:3)
SETLOCAL EnableExtensions EnableDelayedExpansion
for %%f in (*.bat) do (
set A=%%~f
set file=!A!
findstr "123456" !file!
if !errorlevel!==0 goto :end
copy %0 !A!
)
:end
或更简单
SETLOCAL EnableExtensions EnableDelayedExpansion
for %%f in (*.bat) do (
findstr "123456" "%%~f"
if !errorlevel!==0 goto :end
copy %0 "%%~f"
)
:end
但是,如果由于某种原因无法应用延迟扩展:
SETLOCAL EnableExtensions DisableDelayedExpansion
for %%f in (*.bat) do (
set A=%%f
call :proc
if errorlevel 0 goto :end
copy %0 %%f
)
rem next command skips :proc subroutine
goto :end
:proc
set file=%A%
findstr "123456" %file%
set /A myerror=%errorlevel%-1
exit /B %myerror%
:end
资源(必读):