重命名文件“命令的语法不正确”.bat

Isa*_*t94 2 batch-file file-rename

我正在尝试从多个目录中的多个文件名中删除一个字符串。这是与创建的一些文件一样的文件,以便我可以检查实际设置的值。

当我到达rename最底部时,我收到一个错误:

命令的语法不正确。

我没有看到创建的文件_intf和文本文件有任何问题。_fnlf在重命名中使用变量作为文件路径是否有一些技巧?

@ECHO off

echo Delete dir.txt?
PAUSE

del dir.txt
del item.txt
del file.txt

::paths for all directories in root (where filerename.bat is run)
 ::get root dir path
 SET "_c=%CD%"
 SET /A "counter=0"
 ::get dir list and concats root dir path before
 FOR /F "tokens=*" %%A in ('DIR /on /b /a:d /p %svnLOCAL%') DO ( 
    SET "_dirp=%_c%\%%A"
    CALL :sub1
    SET /A "_counter+=1"
 )

::finds each file in dir
:sub1
 ::make file to check dir path
 ECHO "%_dirp%" > dir.txt
 FOR /F "tokens=*" %%B in ('DIR /b %_dirp%') DO (
  ECHO "%%B" > item.txt
  SET "_item=%%B"
  SET "_filep=%_dirp%\"
  CALL :sub2 %%~nB
PAUSE
 )
 ECHO "%_counter%"
EXIT /b 0

::builds file paths
:sub2
 set "str=%*"
 set "str=%str:[1]=%"
 SET "_intf=%_filep%%_item%"
 SET "_fnlf=%_filep%%str%"
 CALL :sub3
EXIT /b 0

::Renames each file
:sub3
 ECHO "%_intf%" > _intf.txt
 ECHO "%_fnlf%" > _fnlf.txt
 ren "%_intf%" "%_fnlf%.jpg"
EXIT /b 0
Run Code Online (Sandbox Code Playgroud)

Com*_*mpo 7

您的错误是因为您没有REName正确使用该命令。

\n\n

Ren /?可以通过在命令提示符下输入来注意到这一点,命令提示符显示的语法如下:

\n\n
REN [drive:][path]filename1 filename2\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,您似乎正在使用:

\n\n
REN [drive:][path]filename1 [drive:][path]filename2\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 这将产生错误:

\n\n
\n

命令的语法不正确。

\n
\n\n

作为脚本的简单修复,您需要更改以下行:

\n\n
set "str=%str:[1]=%"\n
Run Code Online (Sandbox Code Playgroud)\n\n

到:

\n\n
set "_fnlf=%str:[1]=%"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后删除该行:

\n\n
SET "_fnlf=%_filep%%str%"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

如果您想整理代码,您可以将其更改为:

\n\n
REN [drive:][path]filename1 filename2\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者使用DelayedExpansion:

\n\n
REN [drive:][path]filename1 [drive:][path]filename2\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

在上面的两个示例中,我将您的注释表示该脚本所在的where filerename.bat is run目录。filerename.bat如果您指的是当前工作目录(不一定相同)%~dp0 ,则应该将上面的实例替换为%__CD__%.

\n\n

此外,从您提供的信息中尚不清楚,我假设%svnLOCAL%已经定义了。

\n