如何清理.bat脚本中作为参数提供的文件路径(前后斜杠)以避免语法错误



我有一个简单的.bat脚本,它使用ren重命名文件夹中的所有文件。输入参数是指向包含要重命名的文件的文件夹的路径。脚本有时会返回语法错误,我们已经追踪到输入路径有时有正斜杠、反斜杠或两者的混合(有时以双正斜杠开头(。我们希望通过允许该脚本接受这些类型的路径中的任何一种,并在调用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"
) 
) 
set "corrected=%~1"
set "corrected=%corrected:/=%"

然后用%corrected%代替%1quote the filename,这样:

for %%F in ("%corrected%*.nc") do (

如果%1始终是目录名,则添加

if "%corrected:~-1%" neq "" set "corrected=%corrected%"

作为CCD_ 16线之前的第三CCD_。

第一个set%1的值分配给变量corrected——~删除任何括引号。

第二个set将给定变量中与:=之间匹配的所有字符串更改为=%之间的字符串,并分配给第一个提到的变量(可以是相同的变量,在这种情况下(

如果使用第三个set,则检查最后一个字符是否为,如果不是,则附加一个

引用文件名字符串允许在路径/filename中有空格,如果没有空格,则是无害的。

为了避免尝试重命名文件两次,而不是

for %%F in ("%corrected%*.nc") do (

使用

for /F "delims=" %%F in ('dir /b /a-d "%corrected%*.nc"') do (

这将在内存中建立一个文件名列表,然后处理该列表。

最新更新