1

我开发了一个简单的批处理文件,我想将其设置为计划任务来移动文件。

目前,这是我的代码;

move /-y "C:\Folder\Folder\Folder\*File*.csv" "C:\Folder\Folder\Folder\Folder\File.csv"

pause

但是,这显然会导致重复(以及第二次传输后的覆盖冲突)

如何附加日期(文件每天仅移动一次)或唯一标识符来解决此问题?

谢谢

4

3 回答 3

5

尝试

 move /-y "C:\Folder\Folder\Folder\*File*.csv" "C:\Folder\Folder\Folder\Folder\File_%date:~6,4%_%date:~3,2%_%date:~0,2%.csv" 

注意:上述命令中的数字 6,4 3,2 0,2 取决于您的日期格式。检查您的控制面板(或使用echo %date%)以获取您的默认日期格式。当然,您可以更改顺序:-)

我的默认日期格式是 DD/MM/YYYY 并且此代码段将其更改为 YYYY_MM_DD

于 2012-11-06T11:26:31.090 回答
1

问题很简单,但解决方案批量难看。例如,上面列出的答案之一为我产生了以下输出:

C:\>echo %date:~6,4%_%date:~3,2%_%date:~0,2%
/08/_ 1_Th

显然,它并不总是有效。幸运的是,Rob Van der Woude 已经准备并收集了这样的解决方案。该代码为我生成以下输出:

DateParsed=20121108

为了便于使用,我复制了 Rob 的代码并在此处引用了他的源代码。

:: One of the ugliest scripts required for such a seemingly simple thing is getting dates parsed
:: http://www.robvanderwoude.com/datetimentparse.php
SET Today=%Date: =0%
SET Year=%Today:~-4%
:: Include 1 extra character, which will be either a leading zero or a trailing separator
SET Month=%Today:~-10,3%
:: Remove separator
SET Month=%Month:-=%
SET Month=%Month:/=%
:: Clear leading zeroes

SET /A Month = 100%Month% %% 100
:: And add one again, if necessary
SET /A Month = 100 + %Month%
SET Month=%Month:~-2%
SET Day=%Today:~-7,2%
:: Remove separator
SET Day=%Day:-=%
SET Day=%Day:/=%
:: Clear leading zeroes, as there may be 2 leading zeroes
SET /A Day = 100%Day% %% 100
:: And add one again, if necessary
SET /A Day = 100 + %Day%
SET Day=%Day:~-2%

SET DateParsed=%year%%month%%day%
echo DateParsed=%DateParsed%
于 2012-11-08T08:37:38.650 回答
1

您可以执行类似的操作将日期时间附加到文件名...

for /f "tokens=1-5 delims=/ " %%d in ("%date%") 重命名 "C:\Folder\Folder\Folder\Folder\File.csv" %%e-%%f- %%g.csv

测试 - 在桌面上创建 test.txt 运行 .bat (更改文件名和位置以匹配我在 .bat 文件中的测试文件的名称和位置。)

在我运行 .bat 后,文件名更改为 11-06-2012.txt。

希望这可以帮助。

于 2012-11-06T11:26:27.847 回答