我想将大量文件重命名为S001
,S002
等内容。
我从here获取此代码以添加前缀:
for %a in (*.*) do ren "%a" "prefix - %a"
所以我试着修改它,所以变量会随for
递增,如下所示:
for /l %x in (1,1,5) do %a in (*.*) do ren "%a" "SQ00%x"
显然这是错误的,我后来读到/l
使数字值而不是文件名工作,所以%a
并不意味着任何事情(如果我&#39,请纠正我) ;我错了。)
所以我想知道如何使用文件夹中文件的文件名来增加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循环再做一次循环,即目录中的文件数量,我不知道为什么
答案 0 :(得分:2)
Setlocal enabledelayedexpansion
for %%a in (*.*) do (
set /a Count=Count+1
echo ren "%%a" "!Count! - %%a"
)
是单向的。请参阅set /?
和setlocal /?
。
从Windows NT命令Shell
圆括号也可用于输入多行命令。如果命令行以一组或多组不平衡括号结束,则假定命令行在下一行继续。如果以交互方式输入命令,则shell将提示输入更多内容,直到所有括号均衡。如果该命令是脚本的一部分,则shell会读取其他脚本行,直到所有括号都平衡为止。例如:
1. C:\>( 2. More?echo command1 3. More?echo command2 4. More?) 5. command1 6. command2
第一行仅包含一个左括号。 shell检测到这一点,并提示输入更多内容。接下来,输入两个ECHO命令。最后,右括号平衡左括号,命令完成。然后shell执行复合命令,该命令执行两个单独的ECHO命令。 单个命令不跨越多行命令中的行。物理行的结尾总是终止一个简单的命令(无论是输入还是在脚本文件中输入)。请注意,在前面的示例中,物理线路的末端如何终止每个ECHO命令。