我有一個應用程序讀取目錄中的所有文件,並將重命名這些文件(如果需要)並從它們的內部創建日誌文件,但是是一對夫婦...如果批量條件(在一個if內部)
- 如果文件第15個字符是「。」以外的東西。或「_」,將前14個字符加上第15個字符並存儲爲變量。
- 如果文件第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
你可能有近 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個字符的,如果結果 –
的: 如果目錄文件被貼上標籤重新運行(即: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(重新運行),則它將完美執行。 –