如何在批处理文件中合并 FOR 和 UNTIL
How to combine FOR and UNTIL in batch file
我正在尝试编写一个批处理脚本,它将遍历文件名列表并且:
- 尝试创建该文件
- 检查是否创建成功,如果不成功,过几秒再试
这是我所了解的,借鉴自 。但是,它只会检查和创建 file1.txt,而不是 file2.txt 或 file3.txt。然后它将创建一个文件“%A”。为什么它只循环遍历第一个文件,“%A”来自哪里?
我认为这与我使用变量 %A 的方式有关。特别是因为如果我在命令提示符而不是批处理文件中手动键入它,并使用 %A 而不是 %%A,它可以正常工作。
FOR %%A IN ("file1.txt" "file2.txt" "file3txt") DO (
:Check
IF EXIST %%A GOTO Found
ECHO NotFound: %%A
echo.>%%A
timeout /t 5
GOTO Check
:Found
ECHO Found: %%A
)
您可以使用 CALL
命令来完成此操作,本质上就像函数一样工作。当您使用 CALL
时,代码执行将 return 到调用它的代码中的原始位置并继续。
@echo off
FOR %%A IN ("file1.txt" "file2.txt" "file3txt") DO (
CALL :CHECK "%%~A"
)
GOTO :EOF
REM Functions only below this line
:Check
IF EXIST "%~1" (
ECHO Found: %~1
) ELSE (
ECHO NotFound: %~1
timeout /t 5
GOTO Check
)
GOTO :EOF
我正在尝试编写一个批处理脚本,它将遍历文件名列表并且:
- 尝试创建该文件
- 检查是否创建成功,如果不成功,过几秒再试
这是我所了解的,借鉴自
我认为这与我使用变量 %A 的方式有关。特别是因为如果我在命令提示符而不是批处理文件中手动键入它,并使用 %A 而不是 %%A,它可以正常工作。
FOR %%A IN ("file1.txt" "file2.txt" "file3txt") DO (
:Check
IF EXIST %%A GOTO Found
ECHO NotFound: %%A
echo.>%%A
timeout /t 5
GOTO Check
:Found
ECHO Found: %%A
)
您可以使用 CALL
命令来完成此操作,本质上就像函数一样工作。当您使用 CALL
时,代码执行将 return 到调用它的代码中的原始位置并继续。
@echo off
FOR %%A IN ("file1.txt" "file2.txt" "file3txt") DO (
CALL :CHECK "%%~A"
)
GOTO :EOF
REM Functions only below this line
:Check
IF EXIST "%~1" (
ECHO Found: %~1
) ELSE (
ECHO NotFound: %~1
timeout /t 5
GOTO Check
)
GOTO :EOF