我创建了一个批处理脚本来获取文件,将其复制到一个文件夹,其中包含日期和时间作为文件夹名称,然后根据日期和时间重命名该文件。我的问题是,在上午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
非常感谢任何帮助。
答案 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.txt
到new
,还有其他参数path\file
,with
和spaces.txt
,这些参数不是预期的。
此语法效果更好:
copy "file.txt" "new path\file with spaces.txt"
这里只有两个参数,每个参数都用双引号括起来。