目标:使用批处理文件将具有特定扩展名的子目录中的文件备份到另一个目录。
forfiles /P C:\Users\user\Desktop\testdest\ -D 3 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"
mkdir C:\Users\user\Desktop\testdest\%date%
FOR /R C:\Users\user\Desktop\testsrc\ %%A in (*.txt) do (
echo %%A
copy "%%A" "C:\Users\user\Desktop\testdest\%DATE%\%time:~0,2%_%time:~3,2%_%time:~6,2%_%time:~9,2%_%%~nxA
)
我尝试了多种方法来找到使文件名唯一的方法。不幸的是,子目录中的文件与其他子目录中的文件具有相同的名称,因此要使其在目标目录中唯一,它们需要使用前缀或后缀来使其唯一。尝试使用计数器变量,但无法弄清楚如何递增它。我最终尝试使用时间变量,但是在整个批处理文件运行中它似乎保持不变。
输出是这样的:
copy "C:\Users\user\Desktop\testsrc\sub\subsub\311.txt" "C:\Users\user\Desktop\testdest\01.02.2018\ 9_24_31_52_311.txt
copy "C:\Users\user\Desktop\testsrc\sub\subsub\312.txt" "C:\Users\user\Desktop\testdest\01.02.2018\ 9_24_31_52_312.txt
当有多个具有相同名称的文件时,时间输出保持不变,这是一个问题。
那么为什么时间输出没有改变毫秒呢?
尝试延迟扩展:
setlocal enableDelayedExpansion
forfiles /P C:\Users\user\Desktop\testdest\ -D 3 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"
mkdir C:\Users\user\Desktop\testdest\%date%
FOR /R C:\Users\user\Desktop\testsrc\ %%A in (*.txt) do (
echo %%A
copy "%%A" "C:\Users\user\Desktop\testdest\%DATE%\!time:~0,2!_!time:~3,2!_!time:~6,2!_!time:~9,2!_%%~nxA
)
请注意,%time%在不同的计算机上可能会有所不同,因为它依赖于本地设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句