2017-08-04 214 views
1

使用循環時出現問題。我想要做的是通過在每次迭代中在文件名末尾添加數字「N」來更改文件名,如file1,file2,file3,...因此它不應覆蓋以前的文件名。如何通過在字符串的末尾添加循環編號來更改FOR循環中的字符串?

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 

) 

有誰知道如何解決這個問題?

+2

延遲擴張。 – Compo

+4

[延期擴展](https://stackoverflow.com/a/30284028/2152082),不要命名你的變量'路徑'。 – Stephan

+0

[如何爲/F設置循環內的變量(https://stackoverflow.com/questions/13805187/how-to-set-a-variable-inside-a-loop-for-f) – melpomene

回答

0

我的第一個建議是永遠不會替換預定義的環境變量,如PATH,除非有很好的理由去做。打開命令提示符窗口並運行set以獲取輸出所有預定義變量及其當前值。或維基百科的文章看有關環境變量的章節Windows Environment Variables和閱讀需要幫助的What is the reason for 'sort' is not recognized as an internal or external command, operable program or batch file?

我的第二個建議的答案最好是打開一個命令提示符窗口,運行批處理文件使用/?set /?參數每個命令。然後,可以在一個或多個可研究的頁面上輸出對該命令的幫助。如何使用延遲擴展和時,必須使用它的IFFOR例如由命令SET幫助解釋。編寫批處理文件的其他有用頁面是Microsoft's command-line referenceSS64.com - A-Z index of the Windows CMD command line

我的第三個建議是閱讀關於How to set environment variables with spaces?和其他堆棧溢出問題的答案。並在this answer下半年與命令的詳細信息SETLOCALENDLOCAL

學習所有這些幫助和網頁後,它應該是沒有問題了,瞭解此代碼:

@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 /?