上午10点之前发布时间问题的批处理文件

时间:2014-06-25 11:19:04

标签: windows datetime batch-file file-rename renaming

我创建了一个批处理脚本来获取文件,将其复制到一个文件夹,其中包含日期和时间作为文件夹名称,然后根据日期和时间重命名该文件。我的问题是,在上午10点之前的任何时间,命令都会失败:

c:\ICVERIFY\ICWin420\DATADIR>md C:\SettlementReports\Settlement_Reports\DATADIR\
06-25-2014_ 709_08.24.txt
A subdirectory or file C:\SettlementReports\Settlement_Reports\DATADIR\06-25-201
4_ already exists.
Error occurred while processing: C:\SettlementReports\Settlement_Reports\DATADIR
\06-25-2014_.

这是我的批处理文件,我在错误输出之前已经暂停了一段时间。

cd c:\
cd icverify
cd icwin420
cd DATADIR
:: this is Regional settings dependent so tweak this according your current settings
Echo %DATE% %Time%
Set TDate=%date:~10,4%%date:~4,2%%date:~7,2% FOR %%V IN (%1) DO Rename %%V %%V%TDate%
md C:\SettlementReports\Settlement_Reports\DATADIR\%date:~4,2%-%date:~7,2%-%date:~10,4%_%time:~0,2%%time:~3,2%_%time:~6,5%.txt
timeout /T 1
copy ICRPT*.txt C:\SettlementReports\Settlement_Reports\DATADIR\%date:~4,2%-%date:~7,2%-%date:~10,4%_%time:~0,2%%time:~3,2%_%time:~6,5%.txt
cd c:\
cd Settlementreports
cd settlement_reports
cd datadir
cd %date:~4,2%-%date:~7,2%-%date:~10,4%_%time:~0,2%%time:~3,2%_%time:~6,5%.txt
ren ICRPT*.TXT ICRPT_%date:~4,2%-%date:~7,2%-%date:~10,4%_%time:~0,2%%time:~3,2%_%time:~6,5%.txt

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您的%time%变量包含空格而不是初始0左边填充小于10:00的小时数。你可以使用

set "$time=%time: =0%"

0替换空格,将结果值存储在新变量中。然后将%time%的引用替换为新变量%$time%

md C:\ ....... \%date: ... %_%$time:~0,2%%$time:~3,2%_%$time:~6,5%.txt

或者,如果文件名中的空格不是问题,请引用所有文件引用以避免错误

md "C:\Settlem .... _%time:~6,5%.txt"

对于这两个选项中的任何一个,请更改文件中引用文件/文件夹的所有命令

答案 1 :(得分:0)

0替换空格(参见MC ND的回答)是一种可能性。

但你应该习惯将任何<path>\file.ext放入双引号中。

copy file.txt new path\file with spaces.txt

被解释为copy file.txtnew,还有其他参数path\filewithspaces.txt,这些参数不是预期的。

此语法效果更好:

copy "file.txt" "new path\file with spaces.txt"

这里只有两个参数,每个参数都用双引号括起来。