批处理文件中的嵌套For命令

3

我试图创建一个简单的批处理文件,将源目录中的每个文件单独压缩为"rar"格式。rar文件的命名应基于文件创建的日期/时间。

在获取名称反映准确的日期/时间方面遇到了困难。目前所有创建的rar文件都具有相同的名称。认为问题与使用嵌套FOR命令有关。

我是新手,如果可能的话,希望得到帮助。

setlocal
set _source=H:\Test
set _dest=J:\output

for /f "delims=/ tokens=1-3" %%a in ("%DATE:~4%") do (
        for /f "delims=:. tokens=1-4" %%m in ("%TIME: =0%") do (
            set _FILENAME=basename%%c%%b%%a%%m%%n%%o%%p
        )
    )

ECHO %_FILENAME%

for %%I in (%_source%\*.*) DO (

md "%_dest%\%%~nI"
"rar.exe" A -v50M -m0 -k -y -ep1 -r -t -hp[aabbcc] "%_dest%\%%~nI\%_FILENAME%.rar" "%_source%\%%~nxI"
phpar2.exe c -s640000 -r10 -l "%_dest%\%%~nI\%_FILENAME%.par2" "%_dest%\%%~nI\%_FILENAME%*.rar"

)
1个回答

1
@echo off
setlocal
set "_source=H:\Test"
set "_dest=J:\output"
setlocal enableDelayedExpansion

for %%I in (%_source%\*.*) DO (
    for /f "delims=/ tokens=1-3" %%a in ("%DATE:~4%") do (
        for /f "delims=:. tokens=1-4" %%m in ("!TIME: =0!") do (
            set _FILENAME=basename%%c%%b%%a%%m%%n%%o%%p
            ECHO !_FILENAME!
        )
    )
    md "%_dest%\%%~nI"
    "rar.exe" A -v50M -m0 -k -y -ep1 -r -t -hp[aabbcc] "%_dest%\%%~nI\!_FILENAME!.rar" "%_source%\%%~nxI"
     phpar2.exe c -s640000 -r10 -l "%_dest%\%%~nI\!_FILENAME!.par2" "%_dest%\%%~nI\!_FILENAME!*.rar"
)

endlocaL
endlocal

这是您想要的吗?您可以嵌套这三个循环,但如果要使用_FILENAME,则需要delayedExpansion


这并不是我想做的。我想在%%I循环内嵌套_FILENAME循环(即每次遍历源目录中的每个文件时,都会分配一个新的唯一文件名,与日期和时间相关联)。 - David
@David 哎呀!请给我一点时间。 - npocmaka
尝试了修改后的脚本,但不确定为什么每次迭代时,ECHO !_FILENAME! 仍然打印相同的结果。 - David
@David - 再次编辑。如果您想要访问DATE变量,应该使用延迟扩展(!而不是%)来访问TIME变量。 - npocmaka
太棒了。这正是我想要的。非常感谢你的帮助。今天学到了不少东西。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接