32956
**Windows10でファイル作成日時(もしくは更新日時)を、ファイル名の末尾に付与するバッチファイルはどう書くのでしょうか？**  
・WindowsはOSバージョンによってバッチファイルの書き方は異なるのでしょうか？

* * *

**追記**  
・回答いただいた上の例でrename.batをcドライブに作成してダブルクリックしたのですが、黒い画面が一瞬表示されたような気がするだけですぐ消えてしまい、うまくいきませんでした。

コマンドプロンプトで指定するのかと思い、やってみたのですが、

```

    >rename.bat
    
```

> ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。'蠖｢'  
>  は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と表示され、うまくいきませんでした。  
・rename.batは、BOMなしのUTF-8、改行コードLFで保存しました。

・引数というのは、例えば日本語ファイル名「練習.txt」の場合、  
`>rename.bat 練習.txt`  
と入力するのでしょうか？

・また、上記とは別な話なのですが、最終的には「書き込み不可のドライブにある、ファイル作成日時をファイル名の末尾に付与して、書き込み可の別ドライブへ保存」するバッチファイルを作成したいのですが、可能でしょうか？
CC BY-SA 3.0
2017-02-26T05:04:47.863
32951
2017-02-27T06:12:12.257
2017-02-27T04:18:13.953
7886
7886
question
windows batch-file
Windows10でファイル作成日時(もしくは更新日時)を、ファイル名の末尾に付与するバッチファイル
バッチファイル呼び出し時の第一引数に記述したファイル名に更新日時を追加するサンプルは下記のようになります。  
下記のコードをrename.batとしてShift-
JIS(改行コードはCRLF)で保存して、コマンドプロンプトにて保存したbatファイルの存在するフォルダに`cd`で移動したうえで`rename.bat
hoge.txt`のようにコマンドを実行してください。

```

    @echo off
    
    rem 引数のファイル存在チェック
    if exist "%1" (goto :RENAME) else goto :NO_FILE
    
    :RENAME
    rem 日付時刻文字列整形(2017/02/26 15:56→20170226_1556)
    set upd=%~t1
    set upd=%upd:/=%
    set upd=%upd: =_%
    set upd=%upd::=%
    
    rem 名前変更
    rename %1 "%~n1_%upd%%~x1"
    goto :BAT_END
    
    :NO_FILE
    echo 引数を入力してください。
    echo usage rename.bat hoge.txt
    
    :BAT_END
    
```

> ・WindowsはOSバージョンによってバッチファイルの書き方は異なるのでしょうか？

少なくともXP以降、寡聞にしてバッチファイルの構文に変更があった認識はありません。  
ただし、wuapp.exe(WindowsUpdateの画面を表示するコマンド)が標準では使えなくなるなど、バッチファイルから呼び出すことのできる個々のコマンドラインアプリケーションが変更になっている可能性がありますので、あるバージョンで使えていたバッチファイルが別のバージョンで実行できない場合はあります。

>
> ・また、上記とは別な話なのですが、最終的には「書き込み不可のドライブにある、ファイル作成日時をファイル名の末尾に付与して、書き込み可の別ドライブへ保存」するバッチファイルを作成したいのですが、可能でしょうか？

「書き込み不可のドライブにあるファイルを書き込み可の別ドライブに保存して、ファイル作成日時をファイル名の末尾に付与」する手順を踏めば、お望みの対応ができると思います。  
私の回答ではファイルの **更新日時**
を末尾に追加するため、作成日時を追加したい場合は[dirコマンド](https://www.k-tanaka.net/cmd/dir.php)等を使って作成日時を取得する必要がありますので、ご留意願います。

ちなみにPowerShellの場合は、下記のような記述で書き換えられます。

```

    $f = gp $args[0]
    #作成日を取得する場合は $f.LastWriteTime を $f.CreationTime に書き換える
    $nf = "{0}_{1}{2}" -f $f.BaseName, $f.LastWriteTime.ToString("yyyyMMdd_HHmmss"), $f.Extension
    mv $f $nf
    
```
CC BY-SA 3.0
2017-02-26T07:47:51.237
32956
2017-02-27T06:12:12.257
2017-02-27T06:12:12.257
9820
9820
32951
answer