批处理:循环中替换文本中的数字(重放脚本)

时间:2013-06-08 18:02:12

标签: batch-file cmd

有人可以帮我解决我的问题吗?

我正在尝试创建一个批处理文件,它将执行几个循环(使用ANSYS命令)。这里的问题是我需要根据当前循环更改ANSYS脚本中的数字(来自ANSYS的结果总是随着数字的增加 - results01.res,results02.res等)。所以在FIRST循环中我需要加载到ANSYS results01.res,在SECOND循环results02.res等中,但是当这个“加载”由ANSYS脚本完成时,我需要更改加载文件的数量。

我找到了一些替换txt文件中文本的技巧。其中最好的是这里引用的: http://www.dostips.com/DtCodeBatchFiles.php#Batch.FindAndReplace 问题是,当我想更改数字而不是单词时,这不起作用。这是我的批次:

@echo off
set /a "x=0"
set /a "y=1"

:do_while_loop_start
echo %x% loop
set /a "x=x+1"
echo %y%
set /a "y=y+1"
call rename.bat "results0%y%.res" "results0%x%.res changeNumber.txt>newfile.txt

IF %x%==20 (echo %x% equal to 20
) ELSE (
    goto do_while_loop_start
)

:do_while_loop_end

2 个答案:

答案 0 :(得分:1)

Desired output is to "rename" result01.res to result02.res

查看输出结果,如果没有问题,请移除echo^

@echo off &setlocal
set /a x=0
set /a y=1

:do_while_loop_start
echo %x% loop
set /a x=x+=1
echo %y%
set /a y=y+=1
echo call rename.bat results0%x%.res results0%y%.res changeNumber.txt^>newfile.txt

IF %x%==20 (echo %x% equal to 20
) ELSE (
    goto do_while_loop_start
)

:do_while_loop_end
pause

答案 1 :(得分:0)

您必须注意,如果按升序进行重命名,则在结尾所有名称将重命名为姓氏。例如:

  • 第一个循环:result01.res - > result02.res
  • 第二个循环:先前已重命名为result02.res和其他result02.res - > result03.res
  • 第三个循环:所有result03.res重命名为result04.res
  • 等...
  • 在最后一个循环中:所有以前重命名的名称 - > result20.res

要解决此问题,必须按降序实现重命名。

另一方面,你应该累积前一个循环的重命名到下一个循环,否则最终结果与最后一个循环将被执行相同。您必须在每次循环后将新文件移动到原始文件中。

最后,当数字有2位数时,您的代码会出现问题。

@echo off
set /A x=120, y=121

:do_while_loop_start
   echo Rename %x:~-2% to %y:~-2%
   call rename.bat "results%x:~-2%.res" "results%y:~-2%.res" changeNumber.txt > newfile.txt
   move /Y newfile.txt changeNumber.txt
   set /A x-=1, y-=1
IF %x% gtr 100 goto do_while_loop_start
echo End of loop

:do_while_loop_end

在测试此程序之前,请务必备份原始的changeNumber.txt文件。