<a name=▲このページのトップに戻る
292453バッチ処理のコピーについてHIRO(初) 2005/09/15-17:01

メーカー名:DELL デル
OS名:WindowsXp
パソコン名:Dimension4700C
--
ファイルのバックアップをとるのに
コピー元のファイルの先頭にその時の日時を入れたいのですが、
このようなことはできるんでしょうか?

例えば、

AAA.txt → 200509151620AAA.txt

という感じにしたいのですが・・・。

アドバイスお願いします。

▲このページのトップに戻る
292485Re:バッチ処理のコピーについてjtaka[BJCB] 2005/09/15-18:51

記事番号292453へのコメント
完全なデバッグやってないけど、

@echo off
set DATESTR=%date:~0,4%%date:~5,2%%date:~8,2%
set fn=%DATESTR%%1
ren %1 %fn%
set DATESTR=
set fn=

って感じのバッチファイルで、たとえばバッチファイル名をrendate.bat
にすると、変更したいファイルのあるディレクトリに移動して
rendate AAA.txt
とすると、AAA.txtが現在の日付2005/09/15に対応して
20050915AAA.txt
にリネームされるはず。

ちょっと詳細な説明:
環境変数dateの内容は、現在の日付が、地域と言語のオプション->地域オプション
->標準と形式の(日時の)短い形式で格納されている。
ここで
%date:~0,4%
と評価すると、環境変数の内容の0番目から4文字ぶんだけ取り出される。
これはdateの年の部分になる。
%date:~5,2%
で5番目から2文字文取り出されて、月の部分になる。
%date:~8,2%
は同様に日の部分になる。
これを並べて環境変数DATESTRに設定するとdateのスラッシュがとれた形式に
なる。
set DATESTR=%date:~0,4%%date:~5,2%%date:~8,2%

%1はコマンドの第1の引数が入る変数で、環境変数fnに
set fn=%DATESTR%%1
とすることによって引数の前に現在の日時のスラッシュを除いた文字列が
付いたものが格納される。

ren %1 %fn%
で引数で示されたファイル名を日付付きのファイル名にリネームする。
最後の2行は環境変数をクリアしている。
ここのぶぶんはsetlocalを使ったローカル環境変数を使うともっとスマートに
できるかも知れない。
時刻をつける場合は、環境変数timeをつかって同様にできるはず。

まぁ、あとは工夫してくださいと。

▲このページのトップに戻る
292488Re:バッチ処理のコピーについてjtaka[BJCB] 2005/09/15-18:56

記事番号292485へのコメント
ちなみに、環境変数の一部の抽出はNT系のコマンドプロンプト(cmd.exe)でしか
できないんじゃないかと思う。Win9x系だったらWSHとかのスクリプトをつかう
しかないんじゃないかと思う。NT系でもその手のスクリプトの方が直感的な
コードが書けそうな気がするする。

▲このページのトップに戻る
292670Re:バッチ処理のコピーについてHIRO 2005/09/16-14:26

記事番号292485へのコメント
jtaka[BJCB]さんは No.292485「Re:バッチ処理のコピーについて」で書きました。

ありがとうございました。
何とか日付を入れることができました。

hed_" BORDER="0" WIDTH="88" HEIGHT="31">
◇-?バッチ処理のコピーについて-HIRO(初)(2005/09/15-17:01)No.292453
 ┗?!Re:バッチ処理のコピーについて...-jtaka[BJCB](2005/09/15-18:51)No.292485
  ┣?!!Re:バッチ処理のコピーについて...-jtaka[BJCB](2005/09/15-18:56)No.292488
  ┗?!【ありがとう】Re:バッチ処理の...-HIRO(2005/09/16-14:26)No.292670

▲このページのトップに戻る
292453バッチ処理のコピーについてHIRO(初) 2005/09/15-17:01

メーカー名:DELL デル
OS名:WindowsXp
パソコン名:Dimension4700C
--
ファイルのバックアップをとるのに
コピー元のファイルの先頭にその時の日時を入れたいのですが、
このようなことはできるんでしょうか?

例えば、

AAA.txt → 200509151620AAA.txt

という感じにしたいのですが・・・。

アドバイスお願いします。

▲このページのトップに戻る
292485Re:バッチ処理のコピーについてjtaka[BJCB] 2005/09/15-18:51

記事番号292453へのコメント
完全なデバッグやってないけど、

@echo off
set DATESTR=%date:~0,4%%date:~5,2%%date:~8,2%
set fn=%DATESTR%%1
ren %1 %fn%
set DATESTR=
set fn=

って感じのバッチファイルで、たとえばバッチファイル名をrendate.bat
にすると、変更したいファイルのあるディレクトリに移動して
rendate AAA.txt
とすると、AAA.txtが現在の日付2005/09/15に対応して
20050915AAA.txt
にリネームされるはず。

ちょっと詳細な説明:
環境変数dateの内容は、現在の日付が、地域と言語のオプション->地域オプション
->標準と形式の(日時の)短い形式で格納されている。
ここで
%date:~0,4%
と評価すると、環境変数の内容の0番目から4文字ぶんだけ取り出される。
これはdateの年の部分になる。
%date:~5,2%
で5番目から2文字文取り出されて、月の部分になる。
%date:~8,2%
は同様に日の部分になる。
これを並べて環境変数DATESTRに設定するとdateのスラッシュがとれた形式に
なる。
set DATESTR=%date:~0,4%%date:~5,2%%date:~8,2%

%1はコマンドの第1の引数が入る変数で、環境変数fnに
set fn=%DATESTR%%1
とすることによって引数の前に現在の日時のスラッシュを除いた文字列が
付いたものが格納される。

ren %1 %fn%
で引数で示されたファイル名を日付付きのファイル名にリネームする。
最後の2行は環境変数をクリアしている。
ここのぶぶんはsetlocalを使ったローカル環境変数を使うともっとスマートに
できるかも知れない。
時刻をつける場合は、環境変数timeをつかって同様にできるはず。

まぁ、あとは工夫してくださいと。

▲このページのトップに戻る
292488Re:バッチ処理のコピーについてjtaka[BJCB] 2005/09/15-18:56

記事番号292485へのコメント
ちなみに、環境変数の一部の抽出はNT系のコマンドプロンプト(cmd.exe)でしか
できないんじゃないかと思う。Win9x系だったらWSHとかのスクリプトをつかう
しかないんじゃないかと思う。NT系でもその手のスクリプトの方が直感的な
コードが書けそうな気がするする。

▲このページのトップに戻る
292670Re:バッチ処理のコピーについてHIRO 2005/09/16-14:26

記事番号292485へのコメント
jtaka[BJCB]さんは No.292485「Re:バッチ処理のコピーについて」で書きました。

ありがとうございました。
何とか日付を入れることができました。