gpt4 book ai didi

variables - 使用批量延迟扩展时路径中的特殊字符(感叹号!、胡萝卜 ^ 等)出现问题

转载 作者:行者123 更新时间:2023-12-02 22:47:22 27 4
gpt4 key购买 nike

我环顾四周,找不到任何东西可以让我的脚本正确使用特殊字符(例如 !;^) 在文件路径或文件名中。

我的脚本确实有效,但前提是上述字符不在任何扫描的文件夹或文件名中。如果任何文件夹或文件具有这些字符,则脚本将崩溃。我需要帮助弄清楚如何使我的脚本使用路径或文件名中的特殊字符(如上)。这是我的脚本:

set srcdir=%~dp0%src

set desdir=%~dp0%des

setlocal EnableDelayedExpansion
for /r "%srcdir%" %%f in ("*.txt") do (
set "subdir=%%~f"
set "subdir=!subdir:%srcdir%=%desdir%!"
echo !subdir!
pause
)
endlocal

感谢您的所有帮助!

最佳答案

当您设置变量时启用延迟扩展时,感叹号会被破坏。您可以通过等待延迟扩展直到检索到变量值来避免这种情况。有时这需要一些杂技才能使其发挥作用。在这种情况下,禁用延迟扩展并使用 call 来延迟扩展可能会更容易。

@echo off
setlocal

set "srcdir=%~dp0%src"
set "desdir=%~dp0%des"

for /r "%srcdir%" %%f in ("*.txt") do (
set "subdir=%%~f"

rem // use call to avoid delayed expansion and preserve exclamation marks
call set "subdir=%%subdir:%srcdir%=%desdir%%%"

rem // use set /p rather than echo to exploit quotation marks and preserve carets
call set /P "=%%subdir%%"<NUL & echo;
pause
)

或者,如果您更喜欢延迟扩展,我喜欢用来切换一行延迟扩展的一个技巧是使用 for 循环,如下所示:

@echo off
setlocal

set "srcdir=%~dp0%src"
set "desdir=%~dp0%des"

for /r "%srcdir%" %%f in ("*.txt") do (
set "subdir=%%~f"
setlocal enabledelayedexpansion
for %%I in ("!subdir:%srcdir%=%desdir%!") do endlocal & set "subdir=%%~I" & echo(%%~I
pause
)

关于variables - 使用批量延迟扩展时路径中的特殊字符(感叹号!、胡萝卜 ^ 等)出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36336518/

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