【发布时间】:2017-03-10 08:27:27
【问题描述】:
好的,所以我对批处理脚本还是很陌生,我的代码存在这个问题,我在 for 循环的代码中使用 setlocal enabledelayedexpansion,For 循环遍历特定目录中的文件夹名称,但问题是某些名称可能包含“!”(感叹号),如果是这种情况,它们不会被计入“!文件名!”当代码创建一个新目录时,它不包含“!”。此外,当 xcopy 尝试从原始文件夹复制文件时,找不到该文件夹,因为变量“!文件名!”和原文不一样(不带感叹号)。
所以我发现为此我只需要在代码的某些部分添加“setlocal 启用延迟扩展”并在其他部分将其关闭,但我似乎找不到合适的位置。
代码:
@ECHO OFF
setlocal enabledelayedexpansion
SET Location_Folder=V:
SET Destination_folder=V:\Nonimportable
SET Check_file_validation=V:\Nonimportable\result.txt
SET Excluded_folder=Nonimportable
set "lineNr=12"
For /f "tokens=*" %%O in ('dir /b /a:d "%Location_Folder%"') do (
set filename=%%O
call D:\somefolder\otherfolder\batscriptname.bat !filename!
set Validation=
echo !filename!| FINDSTR /i /c:"%Excluded_folder%" >NUL
IF ERRORLEVEL 1 (
for /F "skip=12 delims=" %%a in (%Check_file_validation%) do if not defined Validation (
set Validation=%%a
call :valid
)
) else (
echo This folder name is excluded: !filename!
)
)
goto Finish
:valid
echo !Validation!| FINDSTR /c:"1" >NUL
if ERRORLEVEL 1 (
set Folder_path=%Location_Folder%\!filename!
set New_Folder_path=%Destination_folder%\!filename!
mkdir "!New_Folder_path!"
echo D | xcopy /o /y /q /s /v "!Folder_path!" "!New_Folder_path!"
rmdir /s /q "!Folder_path!"
) else (
echo Folder is valid !filename!
goto Finish
)
:Finish
exit /b
调用部分调用另一个小(~5 行)批处理文件,检查 sqlplus 服务器是否存在“!文件名!”有效
编辑:除非有“!”,否则整个代码都可以正常工作并执行应有的操作以某个文件夹的名称。
【问题讨论】:
标签: batch-file