Batch file 为批处理文件中的命令嵌套

Batch file 为批处理文件中的命令嵌套,batch-file,Batch File,我试图创建一个简单的批处理文件,它将单独压缩源目录中的每个文件。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

我试图创建一个简单的批处理文件,它将单独压缩源目录中的每个文件。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"

)
这是你想要的吗?
您可以嵌套这三个循环,但需要使用_FILENAME。

这并不是我真正想要做的。我正在尝试将_FILENAME循环嵌套在%%I循环中(也就是说,每次它遍历源目录中的每个文件时,它都会被分配一个与日期和时间相关的新的唯一文件名。@David aaah!请稍等片刻。尝试了修改后的纸条。不确定为什么,但对于每次迭代,ECHO!_文件名!仍然打印相同的结果。@David-再次编辑。时间变量(如果还需要日期)应该通过延迟扩展(
而不是
%
)访问。这正是我想要的。非常感谢您的帮助。今天学到了很多
@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