0

代码是:

setlocal EnableDelayedExpansion
FOR /f "usebackq tokens=*" %%X in (`dir /a-d /s /b "!search_path!" 2^>^&1`) DO @(
  set file_path=%%X
  rem do other stuff
)

延迟扩展是打开的,因为源路径可能有特殊字符,如反引号百分比感叹号和 ^ 转义唱。Windows 路径中允许所有这些字符,我不知道它们是否会出现以及出现在哪里。问题出现了如何处理双百分比参数 %%X,如何将其传递给另一个变量而不进行扩展。如果 DE 在感叹号上,则 sings 将被视为变量,这将导致一系列奇怪的错误。同样的事情是如果我禁用 DE - 同样的情况,但这次是百分比。

任何想法如何使这些行对于可以在 Windows 系统中找到的每个可能的允许路径都安全,无论字符多么奇怪?

问题归结为如何将数据从参数的双百分比安全传递到正常状态%variable%,以便从那一刻起数据可以安全地通过延迟扩展传递。

4

1 回答 1

1

我会尽量适应FOR /R您的需求,这将解决您的一些逃生努力。您可以检查循环中文件列表与dir.

FOR /R将遍历您的目录树(无论如何您都在这样做)并返回与您提供的模式匹配的文件。

列出目录中所有 TXT 类型文件的快速示例及其子目录如下所示:

更新:

这将打印我的目录中包含感叹号的两个文件的内容:

@echo off
for /r %%i in (ex*!*.txt) do (
   type %%~i
)

注意没有延迟的变量扩展。Add'l 变量引用位于for /?列表的底部。

于 2012-05-12T14:57:33.460 回答