我有一个应用程序可以读取目录中的所有文件,并将重命名这些文件(如有必要)并从它们的内部创建日志文件,但是有几个问题......
- 如果文件的第 15 个字符不是“。” 或“_”,将前面的 14 个字符加上第 15 个字符作为子串并存储为变量。
- 如果文件的第 15 个字符是“.” 或“_”将前面的 14 个字符子串并存储为变量。
例如,如果文件名是:DIY_0000000000a.xml,则变量将为 DIY_0000000000a,如果文件名是:DIY_0000000000.xml,则变量将为 DIY_0000000000
这一切都有一个陷阱……
如果用户选择选项 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