

ファイルが存在するディレクトリ名とファイルの作成日を取得してファイル名に加えるbatを作成したいです。  
イメージは以下のようになります。

ファイル名.txt→ファイル名_ディレクトリ名_YYYYMMDD.txt

例：学校情報.txt→学校情報_大学_20230909.txt

現状作成しているコマンドになります。

[code]

    @echo off
    setlocal EnableDelayedExpansion
    
    REM Get the current directory name
    set "dirName=%CD%"
    for %%a in ("%dirName%") do set "dirName=%%~nxa"
    
    REM Rename the file
    ren "file.txt" "file_!dirName!.txt"
    
[/code]


CC BY-SA 4.0
2023-08-21T14:15:15.957
96001
2023-08-22T04:20:18.397
2023-08-21T15:00:49.940
3060
48134
question
windows batch-file コマンドプロンプト
ファイルが存在するディレクトリ名とファイルの作成日を取得してファイル名に加えるbatを作成したいです。


`for`コマンドの対象にするか、バッチファイルやバッチ内のサブルーチンのパラメータとしてファイル名を指定すると、ファイルの日付/時刻情報を受け取れます。  
こんな記事も参考に。  
[forで取得したフォルダごとにサブフォルダ以下全ファイルを検索するfor文の書き方を教えてください](https://ja.stackoverflow.com/q/95889/26370)  
他にもファイル名だけとか拡張子だけを取り出すことができるので、それらを使えるでしょう。

>
[code]

>     %~nI        - %I をファイル名だけに展開します。
>     %~xI        - %I をファイル拡張子だけに展開します。
>     %~tI        - %I ファイルの日付/時刻に展開します。
>  
[/code]

そして日本だと日付はYYYY/MM/DDなので、`set`で`/`を削除する編集を行えば良いでしょう。  
[[Windowsバッチ] 文字列の文字を置き換える](https://pasomaki.com/winbatch-str-replace/)

例えば質問ソースの前半部分は省略して対象部分はこんな感じですね。

[code]

    REM Rename the file
    for %%I in (file.txt) do call :namechange "%%~nxI" %%~tI
    exit /b
    
    :namechange
    REM Parameter %1=""で囲われた空白を含んでも良いファイル名＋拡張子 %2=YYYY/MM/DD %3=HH:MM
    set DAY=%2
    set DAY=%DAY:/=%
    ren %1 "%~n1_!dirName!_%DAY%%~x1"
    
[/code]

なお、`for %%I in
(file.txt)`の部分は複数ファイル(`*.txt`とか`*.*`)や階層的処理を行うなら色々工夫する必要があるでしょう。


CC BY-SA 4.0
2023-08-22T04:20:18.397
96009
2023-08-22T04:20:18.397
26370
96001
answer