2013-10-22 27 views
1

我有一個應用程序讀取目錄中的所有文件,並將重命名這些文件(如果需要)並從它們的內部創建日誌文件,但是是一對夫婦...如果批量條件(在一個if內部)

  1. 如果文件第15個字符是「。」以外的東西。或「_」,將前14個字符加上第15個字符並存儲爲變量。
  2. 如果文件第15個字符是「。」或「_」將前面的14個字符子字符串並存儲爲變量。

例如,如果文件名是:DIY_0000000000a.xml變量將是DIY_0000000000a,如果文件名是:DIY_0000000000.xml變量將DIY_0000000000

有一個catch所有這一切......

如果用戶選擇要重新運行應用程序的選項2,那麼應用程序應該將目錄中的所有文件重命名爲DIY_xxx_rerun.xml或DIY_xxxa_rerun.xml(現在應該解釋上述選項中的「_」)

我遇到的問題和我需要幫助的是,我似乎無法得到正確的條件邏輯。該應用程序的工作原理,但如果我有目錄中的文件混合(即:DIY_0000000000a.xml,DIY_0000000000.xml & DIY_0000000000_rerun.xml,DIY_0000000000a_rerun.xml)它可能工作在一種,但不是其他。非常感謝幫助。

下面是我當前的代碼片段:

SETLOCAL EnableDelayedExpansion 

    :EXECUTE 
    ::IF AN XML FILE EXISTS ADD IT TO A LOG FILE, PROMPT USER IF THEY WANT TO VIEW IT 
    ECHO. 
    ECHO ============================================= 
    ECHO **SELECT YOUR OPTION BY USING YOUR KEYBOARD** 
    ECHO ============================================= 
    ECHO. 
    ECHO 1 - Generate DIY Log Files for normal orders 
    ECHO 2 - Generate DIY Log Files for _rerun orders 
    ECHO 3 - EXIT 

    ECHO. 
    ECHO. 
    SET /P CHOICE=Type your option, then press ENTER: 
    IF %CHOICE%==1 (
     SET RERUN= 
     GOTO PROCESS 
    ) 
    IF %CHOICE%==2 (
     SET RERUN=_rerun 
     GOTO PROCESS 
    ) 
    IF %CHOICE%==3 EXIT 
    IF NOT '%CHOICE%'== SET CHOICE=%CHOICE:~0,1% 
    ECHO. 
    ECHO "%CHOICE%" is not a valid option. 
    PAUSE 
    GOTO EXECUTE 

    :PROCESS 
    IF EXIST DIY*.xml (
     SET /a FILECOUNTER=0 
     ECHO. 
     ECHO Processing... 
     FOR /f "delims=" %%a IN ('DIR /b /a-d /on DIY*.xml') DO (
      SET /a LOGCOUNTER=!FILECOUNTER!/1+1 
      SET ORDERNUMBER=%%a 
      IF "!ORDERNUMBER:~14,1!" NEQ "." (
       IF "!ORDERNUMBER:~14,1!" NEQ "_" (
       SET ORDERNUMBSTR=!ORDERNUMBER:~0,15! 
       ) ELSE (
         SET ORDERNUMBSTR=!ORDERNUMBER:~0,14! 
       ) 
      ) 
      SET ORDERNUMBSTR=!ORDERNUMBER:~0,14! 
      IF "%RERUN%"=="_rerun" (
       REN !ORDERNUMBSTR!.xml !ORDERNUMBSTR!%RERUN%.xml >NUL 2>&1 
      ) ELSE (
       REN *!ORDERNUMBSTR!*.xml !ORDERNUMBSTR!.xml >NUL 2>&1 
      ) 
      FOR /f "tokens=4 delims=<>" %%i IN ('TYPE !ORDERNUMBSTR!%RERUN%.xml ^|find "DIY_LOG_ID"') DO (
       SET DIYLOGID=%%i 
      ) 
      FOR /f "tokens=7 delims=<>" %%j IN ('TYPE !ORDERNUMBSTR!%RERUN%.xml ^|find "ACCOUNT_KEY"') DO (
       SET ACCOUNTKEY=%%j 
       FOR /f "tokens=1-3 delims=-" %%x IN ("!ACCOUNTKEY!") DO (
        SET CONTRACTNR=%%x 
        SET PLANSEQ=%%y 
        SET SUBSEQ=%%z 
       ) 
      ) 
... 

ENDLOCAL 
+0

你可能有近 SET ORDERNUMBER一個邏輯錯誤= %%一個 IF 「訂單編號:!〜14,1」 NEQ「。」 ( IF 「訂單編號:〜!14,1!」 NEQ 「_」( SET ORDERNUMBSTR =訂單編號:!〜0.15 )ELSE(SET = ORDERNUMBSTR ORDERNUMBER:!!!〜0.14 ) ) SET ORDERNUMBSTR =訂單編號:!〜0.14' 它看起來像你我刪除了該行,這裏是我的結果,無論設置ORDERNUMBSTR到第14個字符的,如果結果 –

+0

的: 如果目錄文件被貼上標籤重新運行(即:DIY_000/a_rerun.xml),我選擇選項1(正常),它剝離_rerun並完美執行。 如果dir中的文件是正常的(即:DIY_000/a.xml),並且我選擇了選項2(重新運行),則它只適用於末尾具有額外字符(a/b)的文件。 如果dir中的文件是正常的(即:DIY_000/a.xml),並且我選擇選項1(正常),則它只適用於末尾具有額外字符(a/b)的文件。 如果將dir中的文件標記爲重新運行(即:DIY_000/a_rerun.xml),並且選擇選項2(重新運行),則它將完美執行。 –

回答

0

只是需要每天要想一想......

能得到我想要的東西通過以下FOR循環,而不是國際單項體育聯合會

FOR /f "delims=" %%a IN ('DIR /b /a-d /on DTL*.XML') DO (
     SET /a LOGCOUNTER=!FILECOUNTER!/1+1 
     SET ORDERNUMBER=%%a 
     **FOR /f "tokens=1,2 delims=_." %%p IN ("!ORDERNUMBER!") DO (
      SET ORDERNUMBSTR=%%p_%%q** 
     ) 
     IF "%RERUN%"=="_rerun" (
      REN !ORDERNUMBSTR!.XML !ORDERNUMBSTR!%RERUN%.XML >NUL 2>&1 
     ) ELSE (
      REN *!ORDERNUMBSTR!*.XML !ORDERNUMBSTR!.XML >NUL 2>&1 
     ) 
     ... 
相關問題