在文件名中用空格和点重命名文件

我正在制作一个简单的* bat文件,用于replace空格()和下划线(_)的点(。)。

我认为这应该工作,但它不:

@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" ) 

你知道发生了什么事吗?

Solutions Collecting From Web of "在文件名中用空格和点重命名文件"

尝试这个:

 @ECHO OFF&setlocal

 FOR %% f IN(%*)DO(
设置“oldname = %%〜ff”
设置“oldfname = %%〜nf”
设置“extension = %%〜xf”
 setlocal enabledelayedexpansion
设置“filename =!oldfname:。= _!”
设置“文件名=!文件名:= _!”
如果不是“!filename!”==“!oldfname!”  RENAME“!oldname!”  “!!!名扩展!”
 ENDLOCAL
 )

set的分配放在双引号中,以保护你的代码不受丑陋的字符的影响。 稍后在for循环中设置delayed expansion以保存文件名中的感叹号和插入符号。

你的循环变量是%%f但是在第一行,你把它分配给你使用%%j filename

你的代码应该是这样的:

 @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" )