gpt4 book ai didi

batch-file - 字符串中的延迟扩展和感叹号

转载 作者:行者123 更新时间:2023-12-04 01:59:21 29 4
gpt4 key购买 nike

好的,所以我对批处理脚本还是很陌生,我的代码有这个问题,我在 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

Call 部分调用另一个小的(约 5 行)批处理文件,该文件检查 sqlplus 服务器是否为“!文件名!”已验证

编辑:除非有“!”以某个文件夹的名称。

最佳答案

问题是set filename=%%O中的参数扩展.
%%O仍然是感叹号,但是当启用延迟扩展时,刘海被丢弃。
结论很简单,扩展 FOR 参数时必须禁用延迟扩展。

但是当您还需要延迟扩展时?
您只需切换模式。

setlocal DisableDelayedExpansion
For /f "tokens=*" %%O in ('dir /b /a:d "%Location_Folder%"') do (
set "filename=%%O" -- Here the DelayedExpansion have to be disabled
setlocal EnableDelayedExpansion

call D:\somefolder\otherfolder\batscriptname.bat filename
set "Validation="
...
endlocal
)

另见我对 CALL myBat.bat filename 的修改而不是 CALL myBat.bat !filename! .
您不应该在 CALL 中使用内容,最好通过引用使用变量,并在您的函数中使用内容
set "_filename=!%1!"

因为 CALL本身有一些令人讨厌的行为,包括空格、插入符号等

关于batch-file - 字符串中的延迟扩展和感叹号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42713625/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com