gpt4 book ai didi

batch-file - 如何摆脱扩展的 `forfiles` 变量中的双引号?

转载 作者:行者123 更新时间:2023-12-04 00:05:33 24 4
gpt4 key购买 nike

forfiles命令建立了几个变量,由前导 @ 指示,它将有关当前迭代项的数据返回到循环体。

所有与迭代项的路径和名称相关的变量都返回 "" 中的值。 .这些是:@file , @fname , @ext , @path@relpath .

那么:你怎么能摆脱封闭的双引号呢?

例如,以下代码返回给定根目录中文本文件的相对路径:

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @relpath"

假设 C:\root包含两个文件 file1.txtfile2.txt ,输出将是:
".\file1.txt"
".\file2.txt"

但是,我想要没有周围 "" 的文件列表.

我在 Windows 7 64 位上工作。

最佳答案

一种方法是嵌套一个 for %I forfiles 内的循环并使用 %~I扩展 - 在命令提示符窗口中使用此代码:

forfiles /P "C:\root" /M "*.txt" /C "cmd /Q /C for %I in (@relpath) do echo %~I"

要在批处理文件中使用该代码,您必须将 % 加倍。 - 标志:
forfiles /P "C:\root" /M "*.txt" /C "cmd /Q /C for %%I in (@relpath) do echo %%~I"

返回的文件列表将是(依赖于原始问题中的示例文件):
.\file1.txt
.\file2.txt

另一种变体是嵌套另一个 forfiles在最初的正文中,因为 forfiles删除(非转义)给定字符串中的双引号,如 /C 之后的命令行:
forfiles /P "C:\root" /M "*.txt" /C "cmd /C forfiles /P @path\.. /M @file /C \"cmd /C echo @relpath\""

或者(双倍内部 forfiles 是故意的,这可以解决一个错误——参见 this post):
forfiles /P "C:\root" /M "*.txt" /C "forfiles forfiles /P @path\.. /M @file /C \"cmd /C echo @relpath\""

内部 forfiles将精确枚举一项,即外循环传递的一项。自 @relpath已在执行内循环时展开,引号将被删除,因为它们没有被转义。

所以返回的文件列表看起来像(再次从原始问题中获取示例文件):
.\file1.txt

.\file2.txt

行之间的额外换行符由 forfiles 生成.您可以使用重定向来避免这种情况(关闭 forfiles 输出,但在控制台窗口中仅显示 echo 输出):
> nul forfiles /P "C:\root" /M "*.txt" /C "cmd /C forfiles /P @path\.. /M @file /C 0x22cmd /C > con echo @relpath0x22"

关于batch-file - 如何摆脱扩展的 `forfiles` 变量中的双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491883/

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