草庐IT

windows - 了解 (set) 说明符的 CMD.EXE FOR 行为

coder 2024-06-08 原文

我在 Windows 7 环境中执行的 CMD.EXE 批处理文件中有以下命令:

FOR %%f IN ("C:\TEMP\FILE.TXT" "C:\TEMP\FILE2.TXT") DO (
   ECHO %%f
)
  • C:\TEMP\FILE.TXT 存在
  • C:\TEMP\FILE2.TXT 确实存在

这会产生以下输出:

"C:\TEMP\FILE.TXT"
"C:\TEMP\FILE2.TXT"

但是,我发现如果我更改 FOR 命令以包含通配符,例如 ?或 * 在文件名中,我得到了我期望的结果,这只是 C:\TEMP\FILE2.TXT 的回显

即:

FOR %%f IN ("C:\TEMP\FILE.TXT?" "C:\TEMP\FILE2.TXT?") DO (
 ECHO %%f
)

产生: C:\TEMP\file2.txt

FOR 命令的文档指出:

FOR %variable IN (set) DO command [command-parameters]

%variable  Specifies a single letter replaceable parameter.
(set)      Specifies a set of one or more files.  Wildcards may be used.
command    Specifies the command to carry out for each file.
command-parameters

似乎如果 (set) 说明符中没有通配符,则 FOR 命令会将文件路径视为字符串文字,并只是对其进行迭代。我误解了文档吗?在我看来,文件 (set) 说明符中存在(或缺少)通配符不应影响行为。

最佳答案

你已经完全理解了。

for 命令旨在迭代一组不需要是文件或文件夹的元素(更准确地说,它们不需要存在于文件系统中)。

但是当集合中的一个元素包含通配符时,它将被视为对需要解析的文件系统的查询,并且集合中的元素将被替换为与通配符匹配的文件/文件夹列表表达。

你应该注意到这个查询并不总是静态的。在查询过程中只检索第一个匹配的文件/文件夹,但如果文件系统通知有更多文件/文件夹匹配通配符表达式,将进行连续查询以检索剩余的元素。如果添加/重命名任何文件并匹配通配符表达式,它可以或不可以(取决于文件系统、命名等)包含在列表中。

不,没有办法逃避通配符表达式。集合中的元素中存在 *? 将在到达集合中的该元素时执行文件系统查询。

在执行 do 子句中的代码时,如果使用了 for 可替换参数修饰符(%%~...)检索当前引用元素的信息,也将访问文件系统。

如果文件/文件夹存在(集合中的元素是有效引用或已通过扩展通配符表达式检索到),则检索请求的信息,但如果文件/文件夹不存在,则取决于您可以获得的特定修饰符:

  • 如果文件/文件夹存在,正确/逻辑值应该是什么:驱动器、路径、名称、扩展名,只是您包含在元素中的部分,或者,如果缺少,从文件系统检索的信息,假设该元素是相对于当前事件目录的文件/文件夹引用。

    这一点的一个特殊情况是短名称(~s 修饰符)。它将返回文件/文件夹引用路径中存在且在文件系统中存储有短名称的那些目录的 版本,以及为那些没有简称或不存在。

  • 空字符串:属性、大小、时间戳以及需要现有文件/文件夹检索其信息的所有元素。

关于windows - 了解 (set) 说明符的 CMD.EXE FOR 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307279/

有关windows - 了解 (set) 说明符的 CMD.EXE FOR 行为的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  3. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  9. ruby - Ruby gsub 替换中的行为不一致? - 2

    两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio

  10. ruby - Arrays Sets 和 SortedSets 在 Ruby 中是如何实现的 - 2

    通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复

随机推荐