我正在使用拖放一个简单的* 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"
)
你知道是怎么回事?
尝试这个:
@ECHO OFF &setlocal
FOR %%f IN (%*) DO (
set "oldname=%%~ff"
set "oldfname=%%~nf"
set "extension=%%~xf"
setlocal enabledelayedexpansion
set "filename=!oldfname:.=_!"
set "filename=!filename: =_!"
if not "!filename!"=="!oldfname!" RENAME "!oldname!" "!filename!!extension!"
endlocal
)
看跌期权的分配set
在双引号来保护你的代码丑陋的人物。 设置delayed expansion
以后在for循环,以节省感叹号和插入符的文件名。
你的循环变量%%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"
然后,你拖N”拖放操作后检查‘%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"
)