1

空白 ( ) とドット (.) をアンダースコア (_) に置き換えるためのドラッグ/ドロップ機能を備えた単純な *bat ファイルを作成しています。

これはうまくいくはずだと思いますが、うまくいきません:

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%f IN (%*) DO (
set filename=%%~nj
set filename=!filename:.=_!
set filename=!filename: =_!
if not "!filename!"=="%%~nf" RENAME "%%f" "!filename!%%~xf"
)

何が起こっているか知っていますか?

4

2 に答える 2

0

ループ変数は%%f最初の行にありますが、使用する場所に割り当てfilenameます%%j

コードは次のようになります。

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%f IN (%*) DO (

rem corrected-begin
set filename=%%~nf
rem corrected-end

set filename=!filename:.=_!
set filename=!filename: =_!
if not "!filename!"=="%%~nf" RENAME "%%f" "!filename!%%~xf"
)

また、最終的な引用符を一貫して削除することを確認することもできます. つまり、ループの最後の行は次のようになります。

if not "!filename!"=="%%~nf" RENAME "%%~f" "!filename!%%~xf"

次に、移動中のファイルのディレクトリ部分を抑制しないでください。

if not "!filename!"=="%%~nf" RENAME "%%~dpnxf" "!filename!%%~xf"

コードを解放する前に、最後の行を次のように置き換えてください。

if not "!filename!"=="%%~nf" ECHO RENAME "%%~f" "!filename!%%~xf" >> "%TEMP%\test.txt"

次に、ドラッグ アンド ドロップ操作の後、"%TEMP%\test.txt" を調べて、操作が含まれているかどうか、および期待どおりのファイルが含まれているかどうかを確認します。

参考までに、すべての変更後の完全なファイルを次に示します。

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%f IN (%*) DO (
    set filename=%%~nf
    set filename=!filename:.=_!
    set filename=!filename: =_!
    rem uncomment  for debugging.
    rem if not "!filename!"=="%%~nf" ECHO RENAME "%%~dpnxf" "!filename!%%~xf" >>     "%TEMP%\test.txt"
    rem comment for debugging.
    if not "!filename!"=="%%~nf" RENAME "%%~dpnxf" "!filename!%%~xf"
)
于 2013-05-23T11:41:22.120 に答える