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:-)

4

2 に答える 2

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
于 2013-02-15T14:08:50.293 に答える
2

RENAMEでワイルドカードを使用するのは注意が必要です。良い公式ドキュメントはありませんが、それがどのように機能するかについてのルールを実験して公開しました。WindowsのRENAMEコマンドがワイルドカードをどのように解釈するかを参照してください。

ファイル名にドットが含まれていない限り、次のコマンドを使用して名前を変更できます(最後の拡張子ドットはOKです)。

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

の数は?、フォルダ内の最長の名前以上である必要があります。

ファイル名にドットが含まれている場合、結果は正しくありません。たとえば、part1.part2.csvになりpart1-2013-02-15.part2.csvます。

もう1つのオプションは、FORループを使用することです。この手法を使用すると、任意のファイルに日付を安全に追加できます。

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

ただし、後日プロセスを再実行すると、どちらのソリューションにも問題が発生します。新しいファイルがアーカイブに追加されますが、新しいアーカイブファイルと古いアーカイブファイルの両方の名前が現在の日付に変更されます。それはうまくいきません。

rojoの回答で提案されているように、FORループを使用して、ファイルを1つのステップでコピーして名前を変更することをお勧めします。

または、フォルダ名に日付を含む新しいアーカイブフォルダを作成し、名前を変更せずにファイルを日付の付いたアーカイブフォルダにコピーすることをお勧めします:-)

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%"

プロセスが同じ日に複数回実行される可能性がある場合は、フォルダー名に時間を含めることをお勧めします。

于 2013-02-15T14:49:50.197 に答える