gpt4 book ai didi

windows - DOS/批处理文件在出错时跳出 for 循环

转载 作者:可可西里 更新时间:2023-11-01 10:21:49 25 4
gpt4 key购买 nike

我正在编写一个批处理脚本,用于检查目录中 PDF 文件名的长度。如果文件名的长度超过 3 个字符,那么我需要跳出 for 循环。这应该发生在第一个问题文件中。我的问题是我似乎无法找到跳出循环的方法。

这是我的代码和我得到的输出。我的问题是我用来设置在 0 和 1 之间的 errorCnt 变量永远不会更改为 1,即使我正在设置它也是如此

echo STARTING SCRIPT
setlocal

set errorCnt=0
for %%a in (test*.pdf) do (

echo %%~a

SET "fullname=%%a"
SET "name=%%~na

call :strlen result name

call :finalresult

echo Error count is %errorCnt%

if %errorCnt%==1 (
echo break
goto :break
)

)

:break

goto :EOF


:strlen <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
)
(
endlocal
set "%~1=%len%"
exit /b
)

:finalresult
echo %name% - characters: %result%
if %result% GTR 3 GOTO error1

goto :EOF

:error1
echo ERROR: There are too many characters in this PDF filename.
set errorCnt=1

goto :EOF

输出:

STARTING SCRIPT
test1.pdf
test1 - characters: 5
ERROR: There are too many characters in this PDF filename.
Error count is 0
test2.pdf
test2 - characters: 5
ERROR: There are too many characters in this PDF filename.
Error count is 0

最佳答案

好的,我找到了答案。问题是 DOS/Batch 将 for 循环视为一个单独的命令。我的意思是,如果您在调用 for 循环之前设置了一个变量,那么无论您是否在代码的其他地方更改它,它都将保持不变。

解决方法是使用 EnableDelayedExpansion。

Batch script for loop won't set variable

一旦我将我的代码更改为此,它就可以很好地工作。

echo STARTING SCRIPT

setlocal enabledelayedexpansion

...
rem notice the ! signs

if !errorCnt!==1 (
echo break
goto :break
)

STARTING SCRIPT
test1.pdf
test1 - characters: 5
ERROR: There are too many characters in this PDF filename.
Error count is 1
break

关于windows - DOS/批处理文件在出错时跳出 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com