您的循环变量%%f
位于第一行,您将其分配给filename
您 use %%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"
)