我有一个文件夹,里面有数千个 .pdf 文件,每个文件都以 5 位或 6 位数字的帐号命名。我有一个脚本,可以创建一个具有相同帐号的文件夹并将文件移动到其中。
echo ON
Title Move files Routine
setlocal enabledelayedexpansion
pushd D:\test1\source\
for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
set filename=%%1&set dirname=!filename:~0,6!
if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
move %%1 D:\test1\source\!dirname!\
)
PAUSE
但是,我需要每天运行此脚本,因为源目录中添加了新文件,如果脚本将文件移动到已经包含同名文件的目录中,它将覆盖该文件而不是重命名。我该如何调整脚本来解决这个问题。我的选择似乎是
- 附加到现有文件(这似乎需要额外的软件)
- 重命名(例如将 123456.pdf 重命名为 123456_001.pdf)
- 将日期添加到文件名(例如 123456.pdf 到 123456_MMMMddyyyy.pdf)
我对这些选项都满意,只是不知道如何将其放入脚本中。任何帮助都非常感谢。
答案1
您可以执行 3),但我建议您也添加当前时间:
echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
例如,这将输出
时间戳 = 2018-03-13-17-18-38
因此你的批处理文件看起来应该是这样的:
echo ON
Title Move files Routine
setlocal enabledelayedexpansion
pushd D:\test1\source\
for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
set filename=%%1&set dirname=!filename:~0,6!
if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
move %%1 D:\test1\source\!dirname!\%%1--%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%.pdf
)
PAUSE