我在一个文件夹里有几个zip文件,文件名里有一个带下划线的数字,比如C:\codedeploy\uat-prod\xxxx_123.zip。我想遍历所有的文件,并将文件名中的数字放到一个变量(fileNumber)中,然后从另一个变量(buildNumber)中减去(这是从文本文件中加载的整数值).第一次拆分后,我能够得到123.zip(在%%a中),所以,为了得到数字,我再次拆分了它(得到了这个%%i)。然后我试着将这些值分配给变量fileNumber、buildNumber和result。我检查了这些变量是否得到了分配值,把它们写进了一个以逗号分隔的test.txt文件中,但所有的变量值都是空的。在这些值计算正确后,如果文件满足这个条件,我想删除这个文件,如果%result% GEQ %limit%。
set /p Build=<release_version.txt
Setlocal EnableDelayedExpansion
set /A result=0
for %%f in (C:\codedeploy\uat-prod\*.zip) do (
echo "fullname: %%f ">>"C:\codedeploy\uat-prod\test.txt"
for /f "tokens=2 delims=_" %%a in ("%%f") do (
set limit=7
echo "FileNum: %%a">>"C:\codedeploy\uat-prod\test.txt"
for /f "tokens=1,2 delims=." %%i in ("%%a") do (
echo "Num: %%i">>"C:\codedeploy\uat-prod\test.txt"
set /A fileNumber=%%i
set /A buildNumber=%Build%
set /a result=buildNumber-fileNumber
echo "fileNumber: %fileNumber%, buildNumber: %buildNumber%, finla: %result%">>"C:\codedeploy\uat-prod\test.txt"
REM set /a result=%Build%-%%i
REM echo "value is=%result%"
REM if %result% GEQ %limit% (Del %%f)
REM if %result% GEQ %limit% (Del "%%f")
rem if %Build%-%%i GEQ %limit% (Del /S /Q "%%f")
)
)
)
我一直在为实现这个目标而伤脑筋。所以,任何关于这个问题的帮助都将是感激的.先谢谢你。
我可能不太明白你想达到什么目的,但这个看起来应该是一样的,但更有效。(显然是使用了适当的 !
's代表延迟变量).
Set /P "Build=" 0< "release_version.txt"
Set "limit=7"
Set "result=0"
(
For %%G In ("C:\codedeploy\uat-prod\*_*.zip") Do (
Echo "fullname: %%G"
For /F "EOL=: Tokens=2 Delims=_" %%H In ("%%~nG") Do (
Echo "FileNum: %%H%%xG"
Echo "Num: %%H"
SetLocal EnableDelayedExpansion
Set /A result=Build - %%H
Echo "fileNumber: %%H, buildNumber: %Build%, final: !result!"
Rem If !result! GEq %limit% Del /A /F "%%G"
EndLocal
)
)
) 1> "C:\codedeploy\uat-prod\test.txt"