gpt4 book ai didi

batch-file - 在批处理文件中使用SetDelayedExpansion : handling dirs/filenames containing !

转载 作者:行者123 更新时间:2023-12-02 18:46:48 25 4
gpt4 key购买 nike

我有两个批处理文件(XP):

测试.bat:

setlocal EnableDelayedExpansion

rem check for argument
if [%1]==[] goto :noarg

:arg
rem check for trailing backslash and remove it if it's there
set dirname=%1
IF !dirname:~-1!==\ SET "dirname=!dirname:~0,-1!"

rem find all log files in passed directory and call test2.bat for each one
for /f "tokens=* delims= " %%a in ('dir !dirname!\*.log /s /b') do call test2.bat "%%a"

goto :finish

:noarg
rem prompt for directory to scan
set /p dirname=Type the drive or directory, then hit enter:

rem loop if nothing entered
if [!dirname!]==[] goto :noarg

rem check for trailing backslash and remove it if it's there
IF !dirname:~-1!==\ SET "dirname=!dirname:~0,-1!"

rem find all log files in passed directory and call test2.bat for each one
for /f "tokens=* delims= " %%a in ('dir "!dirname!"\*.log /s /b') do call test2.bat "%%a"

goto :finish

:finish

测试2.bat:

echo %1

演示问题:

-创建一个名为 c:\test 的目录和另一个名为 c:\test 的目录!并在每个目录中放置一个空的 test.log 文件。

然后运行:

test c:\test

这按预期工作(test2.bat 回显“c:\test\test.log”)

现在运行:

test c:\test!

问题是 test2.bat 回显“c:\test\test.log”而不是所需的“c:\test!\test.log”)

我意识到这是因为!保留供 EnableDelayedExpansion 使用。但如果解决方案是“使用%扩展”,那么我就挂了,因为我需要使用DelayedExpansion(根据 Handling trailing backslash & directory names with spaces in batch files )

我研究过:

setlocal DisableDelayedExpansion

endlocal

How can I escape an exclamation mark ! in cmd scripts?

运气不好(可能是 PEBCAK)。

有什么想法吗?

最佳答案

问题在于 %1 和 %%a 的扩展,延迟扩展 !已删除。
所以你应该首先禁用延迟扩展。
顺便提一句。不需要删除尾部斜杠(编辑:仅当它不是根路径时才是正确的)

setlocal DisableDelayedExpansion

rem check for argument
if "%~1"=="" goto :noarg

:arg
set "dirname=%~1"

rem find all log files in passed directory and call test2.bat for each one
for /f "tokens=* delims=" %%a in ('dir "%dirname%\*.log" /s /b') do (
set "file=%%~a"
setlocal EnableDelayedExpansion
echo found #!file!#
call test2.bat "!file!"
endlocal
)

关于batch-file - 在批处理文件中使用SetDelayedExpansion : handling dirs/filenames containing !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226793/

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