Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用.bat重命名多个文件_Batch File - Fatal编程技术网

Batch file 使用.bat重命名多个文件

Batch file 使用.bat重命名多个文件,batch-file,Batch File,我一直在Windows 7中寻找一个.bat文件,该文件给定一个名称和一个文件目录,将该目录中的所有文件重命名为用户传递的名称,并连接为一个从0到9的数字。 例如: 假设我有一个包含两个文件a.txt和b.txt的目录,我想将它们的名称更改为documentX.txt(X是一个从0到9的数字),因此在最后脚本会将名称更改为document1.txt和document2.txt 我尝试过这样的事情,但没有成功: @echo off @set a=1 @set pref=ho

我一直在Windows 7中寻找一个.bat文件,该文件给定一个名称和一个文件目录,将该目录中的所有文件重命名为用户传递的名称,并连接为一个从0到9的数字。 例如: 假设我有一个包含两个文件a.txt和b.txt的目录,我想将它们的名称更改为documentX.txt(X是一个从0到9的数字),因此在最后脚本会将名称更改为document1.txt和document2.txt

我尝试过这样的事情,但没有成功:

    @echo off
    @set a=1
    @set pref=hola

    for /D %%f in (C:\*.txt) 
     do 
     rename *.txt %pref%%a%
     @set /A a = %a%+1

FOR命令不能跨越多行,除非使用括号或行继续符
^
。第一个圆括号必须与IN位于同一行,第二个圆括号必须与DO位于同一行

不能在带括号的代码块中使用普通扩展,因为该代码块也会设置值,因为扩展发生在解析时,而整个代码块会立即解析。因此,该值将是您设置它之前存在的值!解决方法是使用延迟扩展。这在执行该行时发生。必须使用
setlocal enableDelayedExpansion
启用它

延迟扩展会导致问题,因为
在文件名中有效,如果变量扩展包含
,则它将被损坏启用延迟扩展时。解决方案是在循环中打开和关闭延迟扩展

您想要一个没有任何选项的简单FOR。
/D
选项查找目录而不是文件

您不需要在
SET/a
语句中展开数值变量

最后一件事-使用
ECHO OFF
后无需使用
@

@echo off
setlocal disableDelayedExpansion
set "n=0"
set "pref=document"

for %%F in (c:\*.txt) do (
  set "file=%%F"
  set /a n+=1
  setlocal enableDelayedExpansion
  ren "!file!" "%pref%!n!.txt"
  endlocal
)
有一种更简单的方法来完成这项任务。使用
DIR/B
列出所有
.txt
文件,并将结果传送到
FINSTDR/N“^”
。FINDSTR将匹配所有文件,并在每个值前面加上一个序号,后跟一个冒号。使用FOR/F将结果解析为数字和文件名,以便可以重命名

@echo off
setlocal
set "pref=document"
for /f "tokens=1* delims=:" %%A in ('dir /b /a-d *.txt^|findstr /n "^"') do (
  ren "%%B" "%pref%%%A.txt"
)

FOR命令不能跨越多行,除非使用括号或行继续符
^
。第一个圆括号必须与IN位于同一行,第二个圆括号必须与DO位于同一行

不能在带括号的代码块中使用普通扩展,因为该代码块也会设置值,因为扩展发生在解析时,而整个代码块会立即解析。因此,该值将是您设置它之前存在的值!解决方法是使用延迟扩展。这在执行该行时发生。必须使用
setlocal enableDelayedExpansion
启用它

延迟扩展会导致问题,因为
在文件名中有效,如果变量扩展包含
,则它将被损坏启用延迟扩展时。解决方案是在循环中打开和关闭延迟扩展

您想要一个没有任何选项的简单FOR。
/D
选项查找目录而不是文件

您不需要在
SET/a
语句中展开数值变量

最后一件事-使用
ECHO OFF
后无需使用
@

@echo off
setlocal disableDelayedExpansion
set "n=0"
set "pref=document"

for %%F in (c:\*.txt) do (
  set "file=%%F"
  set /a n+=1
  setlocal enableDelayedExpansion
  ren "!file!" "%pref%!n!.txt"
  endlocal
)
有一种更简单的方法来完成这项任务。使用
DIR/B
列出所有
.txt
文件,并将结果传送到
FINSTDR/N“^”
。FINDSTR将匹配所有文件,并在每个值前面加上一个序号,后跟一个冒号。使用FOR/F将结果解析为数字和文件名,以便可以重命名

@echo off
setlocal
set "pref=document"
for /f "tokens=1* delims=:" %%A in ('dir /b /a-d *.txt^|findstr /n "^"') do (
  ren "%%B" "%pref%%%A.txt"
)

如果您的问题得到了满意的回答,那么您应该通过单击答案左上角附近的复选标记来接受答案。这样做会让其他人知道问题已经得到了回答,它会给你2点声誉,并给回答提供者15分。只能接受一个答案。一旦你达到15个代表点,你也将有权投票决定答案。只要你觉得有用,你就可以投更多的答案,甚至是对别人问题的答案。向上投票给答案提供者10分。如果你的问题得到满意的回答,那么你应该点击答案左上角附近的复选标记接受答案。这样做会让其他人知道问题已经得到了回答,它会给你2点声誉,并给回答提供者15分。只能接受一个答案。一旦你达到15个代表点,你也将有权投票决定答案。只要你觉得有用,你就可以投更多的答案,甚至是对别人问题的答案。向上投票给答案提供者10分。