2013-02-15 76 views
0

我想將日期從一個目錄複製到另一個目錄。這是應該的樣子將日期添加到複製文件

原始文件名:XEsalary.csv

結果文件名:XEsalary-2013-02-15.csv

這裏是我的代碼:

set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2% 
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test 
cd %LOCAL% 

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log 
xcopy /y /f /v "%LOCAL%\*.csv" "%LOCAL%\archive\*.csv" 
:: assist with turning this into a for loop 
ren %LOCAL%\archive\*.csv %LOCAL%\archive\*%PVM%.csv 
echo. >>%LOG%\%PVM%.log 

複製作品只是文件。它是不起作用的重命名部分。請幫忙嗎?

Thx in advance :-)

+0

爲什麼在第4行中,當您爲LOCAL設置變量時,是否在最後放置了「cd%LOCAL%」?其他一些可能起作用但不值得回答的事情: 是否啓用延遲擴展? 預先設置了LOCAL的值(再次設置時調用它)? 您在聲明PVM的同時在第二行的明顯末尾放置了另一個SET命令。這是否意味着要在一個新的線上? 希望其中的一些幫助。 – 2013-02-15 08:58:06

回答

2

與RENAME配合使用通配符非常棘手。沒有很好的官方文檔,但我已經試驗併發布瞭如何工作的規則:請參閱How does the Windows RENAME command interpret wildcards?

只要沒有文件名包含點,就可以使用以下命令完成重命名(最後一個擴展名點是可以的)。

ren "%LOCAL%\archive\*.csv" ????????????????????-%PVM%* 

?數量必須大於或等於該文件夾中的最長的名稱。

如果文件名包含點,結果將不正確。例如,part1.part2.csv將變爲part1-2013-02-15.part2.csv

另一種選擇是使用FOR循環。使用這種技術,您可以安全地將日期附加到任何文件。

for %%F in ("%LOCAL%\archive\*.csv") do ren "%%F" "%%~nF-%PVM%%%~xF" 

但是,如果您在以後重新運行該過程,兩種解決方案都有問題。新文件將被添加到存檔中,但新的和舊的存檔文件將被重命名爲當前日期。這是行不通的。

按照rojo's answer中的建議,使用FOR循環一步更好地複製和重命名文件。

或者更好的是,創建一個文件夾名稱之日起一個新的存檔文件夾,然後將文件複製到該日期的存檔文件夾不重命名:-)

set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2% 
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test 
cd %LOCAL% 

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log 
md "%LOCAL%\archive\%PMV% 
xcopy /y /f /v "%LOCAL%\*.csv" "%LOCAL%\archive\%PVM%" 

您可能要包括時間在文件夾名稱中如果該進程可以在同一天運行多次。

+0

+1 whoa!頭腦:吹。 – rojo 2013-02-15 15:07:10

2

Windows不允許您使用通配符進行重命名。你必須在for循環中命名每個文件。不妨在複製時進行重命名。這是否做你想要的?

@echo off 
setlocal 
set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2% 
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test 

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log 

pushd "%LOCAL%" 
for %%I in (*.csv) do (
    rem Uncomment the following line to log the copy to archive. 
    rem echo copy "%%I" -^> "%LOCAL%\archive\%%~nI-%PVM%.csv" >>%LOG%\%PVM%.log 
    copy "%%I" "%LOCAL%\archive\%%~nI-%PVM%.csv">NUL 
) 
echo. >>%LOG%\%PVM%.log 
popd 
+0

+1,實際上,你可以使用通配符進行重命名;)請參閱[我的回答](http://stackoverflow.com/a/14897227/1012053) – dbenham 2013-02-15 15:01:44