如何通过在字符串末尾添加循环编号来更改FOR循环中的字符串?

时间:2017-08-04 13:37:56

标签: batch-file

使用循环时遇到问题。我想要做的是通过在每次迭代中在文件名末尾添加数字“N”来更改文件名,例如file1file2file3,...所以它不应该覆盖以前的文件名。

set path=D:\MeasurementData\%~n0%
echo %path%
pause

for /L %%N in (1,1,5) do (

    set file="%path%%%N"
    echo %file%
    pause
    start C:\TomoK.exe %file% "D:\MParameter.mff" "D:\MParameter.mcf"
    Pause

)

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我的第一个建议是永远不会替换像PATH这样的预定义环境变量,除非有充分的理由去做。打开命令提示符窗口并运行set以使用其当前值输出所有预定义变量。或者查看有关环境变量的维基百科文章Windows Environment Variables一章,并阅读What is the reason for '...' is not recognized as an internal or external command, operable program or batch file?

上的答案

我的第二个建议是需要帮助建议打开一个命令提示符窗口并运行批处理文件中使用/?作为参数的每个命令,如set /?。然后在一个或多个可以研究的页面上输出命令的帮助。如何使用延迟扩展以及必须使用何时使用 IF 上的命令 SET FOR 例子。有关编写批处理文件的其他有用页面是Microsoft's command-line referenceSS64.com - A-Z index of the Windows CMD command line

我的第三个建议是阅读How to set environment variables with spaces?上的答案以及与之相关的其他Stack Overflow问题。下半部分位于this answer,其中包含有关命令 SETLOCAL ENDLOCAL 的详细信息。

在研究了所有这些帮助和网页之后,理解这段代码应该没有问题了:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "DataPath=D:\MeasurementData\%~n0"
for /L %%N in (1,1,5) do (
    set "DateFile=%DataPath%%%N"
    echo !DateFile!
    pause
    C:\TomoK.exe "!DateFile!" "D:\MParameter.mff" "D:\MParameter.mcf"
    pause
)
endlocal

我不知道为什么使用命令 START 来运行可执行文件TomoK.exe,因此将其删除。

但是,批处理文件也可以在没有延迟扩展的情况下编写,因为环路变量DataFile根本不需要在循环体中。并且上面的整个批处理代码可以优化为批处理文件中的单个命令行:

@for /L %%N in (1,1,5) do @C:\TomoK.exe "D:\MeasurementData\%~n0%%N" "D:\MParameter.mff" "D:\MParameter.mcf"

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • pause /?
  • set /?
  • setlocal /?
  • start /?