LoginSignup
Kakeishi_Misa
@Kakeishi_Misa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【バッチ】ファイルをリネームできない

解決したいこと

バッチでzipファイル名を変更したいです。
現在のファイル名の頭に日付を付けたいです。

--想定イメージ--
リネーム前: test.zip
リネーム後: 20210918_test.zip

renameの第1引数にはフルパス、第2引数にはファイル名のみを渡しています。
また、変数「YYYYMMDD」と「filename」までは正しく取得できていることを確認済みです。

変数「newfileName」の値が空欄のままで取得できていません。
そのため、
現在、「test.zip」が「.zip」にリネームされています....

 for %%f in (%*) do (
        REM 日付を取得
        SET YYYYMMDD=%date:/=%

        REM ファイル名取得
        SET filename=%%~nf

        REM ファイル名変更
        Set newfileName=%YYYYMMDD%_%filename%

        rename "%%f" "%newfileName%.zip"
 )
0

1Answer

変数の展開は、forループを含むコマンド行を読み込んだ時に一度行われます。
つまりループを回るごとに改めて変数展開が行われるわけではありません。
それを実現するために「遅延環境変数の展開」という機能があります。
この機能はsetlocal enabledelayedexpansionで有効になります。
遅延環境変数の展開には%変数名%の代わりに!変数名!を使用します。

setlocal enabledelayedexpansion
for %%f in (*.zip) do (
        REM 日付を取得
        SET YYYYMMDD=%date:/=%

        REM ファイル名取得
        SET filename=%%~nf

        REM ファイル名変更
        SET newfileName=!YYYYMMDD!_!filename!

        rename "%%f" "!newfileName!.zip"
)

同時に一カ所修正しました。

for %%f in (%*)

これは

for %%f in (*.zip)

ですね。

それと、数カ所に全角スペースがありました。これも半角スペースに直しました。

1

Comments

  1. @Kakeishi_Misa

    Questioner
    ありがとうございます!!
    ファイル名変更できました!!

Your answer might help someone💌