重命名的文件名有空格的文件和点(Renaming files with spaces and dot

2019-10-18 04:25发布

我正在使用拖放一个简单的* 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"
)

你知道是怎么回事?

Answer 1:

尝试这个:

@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循环,以节省感叹号和插入符的文件名。



Answer 2:

你的循环变量%%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"
)


文章来源: Renaming files with spaces and dots in the filename