我想重命名大量的文件somthing像S001
, S002
等。我从这里得到这个代码添加一个前缀:
for %a in (*.*) do ren "%a" "prefix - %a"
所以我试图修改它,所以一个variables会随着for
增加,如下所示:
for /l %x in (1,1,5) do %a in (*.*) do ren "%a" "SQ00%x"
很明显,这是错误的,我后来看到/l
使工作的数值而不是文件名,所以%a
并不意味着什么(纠正我,如果我错了)。
所以我想知道如何使用文件夹内的文件的文件名增加for
循环中的值。
编辑
我现在设法编写了一个批处理命令来重命名文件,并且:
循环更改不同目录中的文件
ECHO OFF Setlocal enabledelayedexpansion :start cls echo "%cd%" echo where are the files? set/p "files=>" cd "%files%" echo now in: echo "%cd%" echo files extension: set/p "ext=>" ::amount of files in the directory set/a cnt=0 for %%a in (*.%ext%) do set /a cnt+=1 echo File count = %cnt% PAUSE echo new file name: set/p "name=>" set/a Count=1 for /r %%a in (*.%ext%) do ( echo !Count! ren "%%a" "%name%!Count!.%ext%" set /a Count=Count+1 ) PAUSE goto start
现在的问题是重命名文件的FOR循环做了多一个循环,目录中的文件数量,我不知道为什么
Setlocal enabledelayedexpansion for %%a in (*.*) do ( set /a Count=Count+1 echo ren "%%a" "!Count! - %%a" )
是一种方式。 看到set /?
和setlocal /?
。
从Windows NT命令外壳
圆括号也可以用来输入多行命令。 如果命令行以一组或多组不平衡括号结束,则命令行假定在下一行继续。 如果该命令是交互式输入的,shell会提示输入更多的信息,直到所有括号保持平衡。 如果该命令是脚本的一部分,shell将读取其他脚本行,直到所有括号保持平衡。 例如:
1. C:\>( 2. More?echo command1 3. More?echo command2 4. More?) 5. command1 6. command2
第一行只包含一个左括号。 shell检测到这一点,并提示输入更多信息。 接下来,输入两个ECHO命令。 最后,右括号平开括号,命令完成。 shell然后执行复合命令,执行两个单独的ECHO命令。 单个命令不能跨越多行命令中的行。 一条物理线路的末端总是终止一个简单的命令(无论是键入还是输入到脚本文件中)。 在前面的例子中,注意物理线路的末端是如何终止每个ECHO命令的。