批处理脚本处理文件重命名移动时的语法错误与执行异常排查求助
批处理脚本处理文件重命名移动时的语法错误与执行异常排查求助
需求背景
我需要处理客户端上传到共享目录的无扩展名文件,具体规则如下:
- 源文件清单:
\\Server\SharedDirectory\BRSURVEY802DATA\\Server\SharedDirectory\BRSURVEYLOGINDATA\\Server\SharedDirectory\BRSURVEYLOGOUTDATA
- 目标路径与命名规则:
BRSURVEY802DATA→ 重命名为ORDDFILE_&DATE#&TIME#.802,移动到\\Server\SharedDirectory\802\BRSURVEYLOGINDATA→ 重命名为ORDDFILE_&DATE#&TIME#.LOGIN,移动到\\Server\SharedDirectory\SurveyLogin\BRSURVEYLOGOUTDATA→ 重命名为ORDDFILE_&DATE#&TIME#.LOGOUT,移动到\\Server\SharedDirectory\SurveyLogout\
- 其他文件处理:所有不符合上述规则的文件,重命名为
ORDDFILE_&DATE#&TIME#.REJECTED,移动到\\Server\SharedDirectory\Rejected\
前期尝试与遇到的问题
最初的脚本已经能完成三个指定文件的移动重命名,但无法处理其他文件。之后我尝试修改脚本遍历目录下所有文件,却遇到了语法错误和执行异常:
第一次修改的脚本(触发语法错误)
@echo off & Setlocal EnableExtension for /f useback^delims^= %%i in (`dir /a:-d /b "\\Fld6filer\brdProduction_SurveyFiles$\Incoming\ORDD\DEV\"`) do if /i "%%~ni" == "BRSURVEY802DATA" ( move "%%~fi" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\802\ORDDFILE_20230319215412.802" )else if /i "%%~ni" == "BRSURVEYLOGINDATA" ( move "%%~fi" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\ORDDFILE_20230319215412.LOGIN" )else if /i "%%~ni" == "BRSURVEYLOGOUTDATA" ( move "%%~fi" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\ORDDFILE_20230319215412.LOGOUT" )else move "%%~fi" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\ORDDFILE_20230319215412.UNKNOWN" endlocal
执行后直接报错:The syntax of the command is incorrect.
第二次修改的脚本(执行逻辑异常)
为了排查问题,我添加了echo日志,但执行结果依然不符合预期:
for /f %%i in ('dir /b "\\Fld6filer\brdProduction_SurveyFiles$\Incoming\ORDD\DEV\"') do ( if "%%~xi" == "BRSURVEY802DATA" do ( echo I am in move "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\BRSURVEY802DATA" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\802\ORDDFILE_20230319215412.802" ) else if "%%~xi" == "BRSURVEYLOGINDATA" do ( echo I am in Login move "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\BRSURVEYLOGINDATA" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\LOGIN\ORDDFILE_20230319215412.LOGIN" ) else if "%%~xi" == "BRSURVEYLOGOUTDATA" do ( echo I am in Logout move "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\BRSURVEYLOGOUTDATA" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\LOGOUT\ORDDFILE_20230319215412.LOGOUT" ) else do ( ECHO I am in Unknown move "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\*.*" "\\fld6filer\BRDProduction_SurveyFiles$\Incoming\ORDD\DEV\REJECTED\ORDDFILE_20230319215412.UNKNOWN" ) )
执行日志中的异常表现
源目录初始包含4个目录和4个文件,但日志显示:
- 所有对象都在执行第一个IF判断,多次出现*
The system cannot find the file specified.*的错误提示 - 反复报错*
'else' is not recognized as an internal or external command, operable program or batch file.*,但最终所有文件都被成功移动了
我想知道为什么会出现这些异常,以及如何修正脚本让它正常执行?
备注:内容来源于stack exchange,提问作者MChalut
相关产品推荐
相关产品推荐

