gpt4 book ai didi

windows - 批处理 : parameter with both expansion symbols

转载 作者:可可西里 更新时间:2023-11-01 11:12:30 25 4
gpt4 key购买 nike

问题:

是否可以让一个函数接收一个既有百分号又有感叹号的参数?

问题:

我在 FOR/D 中以这种方式处理目录:

FOR /D %%d IN ("%~1\*") DO (
CALL :process "%%~fd"
)

当子目录名称 (%%~fd) 同时包含 %!(这在Windows),例如 C:\&!x#%。当我在子过程 :process 中读取 %1 时,百分号消失了。如果我EnableDelayedExpansion,那么感叹号会起作用。

我读了this post显然,这无法解决。如果延迟扩展被禁用,% 将被删除。如果启用延迟扩展,! 将是。

示例:

ex.bat:

@ECHO OFF
SET arg="%~1"
CALL :clean_echo %arg%
GOTO :EOF

:clean_echo
SET arg="%~1"
SET arg=%arg:&=^&%
SET arg=%arg:|=^|%
SET arg=%arg:<=^<%
SET arg=%arg:>=^>%
ECHO %arg:~1,-1%
GOTO :EOF

如果我执行 ex.bat "%!",输出只是 !% 在传递给 :clean_echo 子过程时丢失。

最佳答案

@ECHO OFF
SETLOCAL
FOR /d %%a IN (*) DO (ECHO %%~fa
SET "var=%%~fa"
CALL :proc var
)

GOTO :EOF

:proc
FOR /f "tokens=1*delims==" %%x IN ('set %1 2^>nul') DO IF /i "%1"=="%%x" (
ECHO %%y
)
GOTO :eof

您对您的应用程序说得不够多,但本质上将此类字符串作为参数传递注定会失败。这是一种可能对您有用的方法,尽管它无法处理以 = 开头的数据(我见过包含 = 的文件名。)

这是一个中间小 pig 游戏,解析器是小 pig 。只要您的数据仍然分配给元变量,它似乎就没问题。真的取决于未说明的 - 正是你想用它做什么。

关于windows - 批处理 : parameter with both expansion symbols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664662/

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