我有一个使用ren
重命名文件夹中所有文件的简单.bat脚本。输入参数是包含要重命名的文件的文件夹的路径。脚本有时会返回语法错误,我们将其追溯到这样一个事实:有时输入路径有正斜杠、反斜杠或两者的混合(有时以双正斜杠开头)。我们希望通过允许该脚本接受任何这些类型的路径,并在调用ren
命令之前将该路径作为.bat脚本的一部分进行清理,从而使该脚本更加健壮。
所以我的问题是:在调用ren
函数之前,有没有一个(一组)命令可以应用于文件路径参数(以下示例中的%1
),以更正所有正斜杠/反斜杠,使其保持一致并避免语法错误?我没有太多使用.bat脚本的经验,所以任何代码示例都会很有帮助。
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%F in (%1*.nc) do (
for /F "tokens=1-8 delims=_" %%a in ("%%~nF") do (
ren "%%F" "%%a_%%b_%%c_%%d_%%e_%%g_%%f_%%h.nc"
)
)
更新:最后,只需要Magoo的最后一个建议,因为将%1
更改为"%~f1"
解决了斜杠问题。我还必须将%~f1\
添加到ren
命令的第一个参数中,因为否则它会在错误的文件夹中查找(第一个for
发现文件没有问题,但ren
命令在错误的文件夹中查找。
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%F in ('dir /b /a-d "%~f1\*.nc"') do (
for /F "tokens=1-8 delims=_" %%a in ("%%~nF") do (
ren "%~f1\%%~nF.nc" "%%a_%%b_%%c_%%d_%%e_%%g_%%f_%%h.nc"
)
)
发布于 2020-12-17 09:32:37
set "corrected=%~1"
set "corrected=%corrected:/=\%"
然后使用%corrected%
代替%1
和quote the filename
,如下所示:
for %%F in ("%corrected%*.nc") do (
如果%1
始终是目录名,则添加
if "%corrected:~-1%" neq "\" set "corrected=%corrected%\"
作为for
行之前的第三个set
行。
第一个set
将%1
的值赋给一个变量corrected
- ~
删除所有括起来的引号。
第二个set
将所有匹配:
和=
之间的字符串更改为给定变量中=
和%
之间的字符串,并将其赋值给第一个变量(可以是相同的变量,如本例)
如果使用了第三个set
,则检查最后一个字符是否为\
,如果不是,则附加一个\
。
filename-string的引号允许路径/filename中有空格,如果没有空格,则是无害的。
为了避免尝试重命名文件两次,而不是
for %%F in ("%corrected%*.nc") do (
使用
for /F "delims=" %%F in ('dir /b /a-d "%corrected%*.nc"') do (
这将在内存中构建一个文件名列表,然后处理该列表。
https://stackoverflow.com/questions/65337387
复制相似问题