Windows批处理文件:在for循环中设置变量

2024-04-30

我有许多具有相同命名方案的文件。作为示例,四个文件分别称为“num_001_001.txt”、“num_002_001.txt”、“num_002_002.txt”、“num_002_003.txt”

第一组数字代表它来自哪个“包”,第二组数字只是用来区分它们。因此,在此示例中,包 001 中有一个文件,包 002 中有 3 个文件。

我正在编写一个 Windows Vista 批处理命令来获取所有文件并将它们移动到它们自己的目录中,其中每个目录代表一个不同的包。所以我想将包 001 的所有文件移动到目录“001”中,将 002 的所有文件移动到目录“002”中

我已经成功编写了一个脚本,它将迭代所有 txt 文件并回显它们。我还编写了一份脚本,将一个文件移动到另一个位置,并创建目录(如果不存在)。

现在我认为我需要使用子字符串,因此我使用 %var:~start,end% 语法来获取它们。作为测试,我编写此代码是为了验证我实际上可以提取子字符串并有条件地创建目录



@echo off
set temp=num_001_001.txt
NOT IF exist %temp:~0,7%\
  mkdir %temp:~0,7%
  

它有效。伟大的。
然后我添加了 for 循环。


@echo off
FOR /R %%X IN (*.txt) DO (
  set temp=%%~nX
  echo directory %temp:~0,7%
)
  

但这是我的输出:



directory num_002
directory num_002
directory num_002
directory num_002
  

怎么了? vista不支持在每次迭代中重新分配变量吗? 这四个文件位于我的目录中,其中之一应创建 num_001。我用 003 004 005 放入不同的文件,所有这些都是最后一个包的名称。我猜我的设置方式有问题。

我有不同的解决方法来完成工作,但我很困惑为什么这样一个简单的概念行不通。


您的问题是,当批处理处理器在执行之前读取 for 命令时,变量会被替换。

尝试这个:

SET temp=Hello, world!
CALL yourbatchfile.bat

您会看到 Hello 被打印了 5 次。

解决办法是延迟扩容;您需要先启用它,然后使用!temp!代替%temp%:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R %%X IN (*.txt) DO (
  set temp=%%~nX
  echo directory !temp:~0,7!
)

See here http://www.robvanderwoude.com/variableexpansion.php更多细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows批处理文件:在for循环中设置变量 的相关文章

随机推荐

  • 更新 Heroku CLI 时出错:存在写锁:更新

    然而 我正在尝试更新 Heroku CLI 但没有成功 Heroku CLI 的当前版本是 heroku cli 6 15 5 1f03166 win32 x64 node v9 3 0 跑步时 heroku update 我收到以下错误
  • 如何使用 Chart.js 在标签中放置新行?

    我有一个使用 Chart js 的带有标签的数据集 我想用换行符将标签分成两行 我努力了 br and n 两者都不起作用 labels A br Waking B C D labels A nWaking B C D 第一个标签应该输出如
  • 为什么 XSS 注入需要对 & 进行转义

    OWASP 建议转义以防止 XSS 注入的五个字符是 lt gt 其中 我无法理解为什么 符号 应该被转义以及如何将其用作注入脚本的向量 有人可以举个例子 所有其他四个字符都被转义 但与号没有转义 所以会有 XSS 注入漏洞 我已经检查了另
  • 我可以从 C# 转换为 asp.Net 以在线托管应用程序吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 是否可以将 C 应用程序转换为 as
  • 甚至阻止超级管理员/dba 删除/更新表?

    我需要确保一些关键任务表永远不会被删除或编辑 唯一可能的操作是从中读取数据 并且 dba 可以添加更多行 就是这样 现在为了增加安全性 我想阻止甚至 dba 都能够删除 更改记录 所以基本上没有人可以删除或更改记录 也没有超级管理员 这些表
  • 编译器:如果条件始终为真/假怎么办

    我想到了条件和编译器 我正在为 Arduino 编写一个应用程序 因此我需要该应用程序尽可能快 在我的代码中我有这个 define DEBUG false if DEBUG String pinName pinName Pin pinNam
  • 如何制作 100% 宽度的 ASP.NET 菜单

    我正在构建一个 asp net 网站 其中需要一个水平 asp 菜单作为全屏宽度 其中有 10 个项目 每个项目的宽度为 10 请提出一个解决方案 因为当我将菜单宽度设置为 100 并且li宽度为 10 它不是全宽度的 但是 当我将菜单宽度
  • JDOM、XPath 和命名空间交互

    我在使用 XPath 表达式从 JDOM 文档中提取一些元素时遇到了非常令人沮丧的情况 这是一个示例 XML 文档 我想从文档中完全删除 ItemCost 元素 但目前无法获取 XPath 表达式来计算任何内容
  • 如何缩小 SQL Server 数据库?

    我有一个数据库大小接近1 9Gb 而MSDE2000不允许数据库超过2 0Gb 我需要缩小这个数据库 以及在不同客户端位置的许多其他类似数据库 我发现并删除了数百条或数千条被认为不需要的记录 这些记录占数据库中一些主要 最大 表的很大一部分
  • 罗伯特·吉塞克 (Robert Giesecke) 的不受管理的出口

    我正在尝试从 vb net 获取 DllExport 到非托管 c 工作 我在用着罗伯特 吉塞克 Robert Giesecke 的不受管理的出口 https sites google com site robertgiesecke Hom
  • 使用 owl:Class 前缀进行 rdflib 和 xml 序列化

    我想使用owl 我的 RDF 本体的 XML 序列化中的前缀 使用 rdflib 版本 4 1 1 不幸的是我仍然得到序列化rdf Description标签 我查看了有关将命名空间绑定到图表的答案RDFLib XML 序列化中的命名空间前
  • Python 正确解析 CSV

    我对 Python 很陌生 我想解析 csv 文件 以便它能够识别带引号的值 例如 1997年 福特 E350 超级豪华卡车 应该拆分为 1997 福特 E350 超级豪华卡车 and NOT 1997 福特 E350 超级 豪华卡车 如果
  • 可转换后:该商品与您的设备不兼容

    我使用 www apportable com 工具 免费版 将我的 Cocos2d IOS 项目转换为 Android APK 文件 经过一些代码调整后转换成功 在我的 Nexus 7 上测试 有效 已上传到 Google Play 在 A
  • 使用 -g 进行编译本身会降低性能吗? [复制]

    这个问题在这里已经有答案了 这是一个关于 gcc 和 clang 的问题 但可能适用于其他编译器 如果我编译我的 C 或 C 代码 并使用 g开关 这本身是否会以任何方式降低编译程序的性能 具有最小的优化 O0 具有最大优化 O3 Note
  • 为什么 pygame.draw.circle 中的中心参数在我的 pygame 轨道模拟器中不被视为一对值?

    这是我的完整代码 import pygame import math Set up the Pygame window pygame init WIDTH 800 HEIGHT 800 screen pygame display set m
  • 检测 jQuery UI 自动完成

    如何检测输入框当前是否为 jQuery UI 自动完成功能 似乎没有一个本机方法 但我希望有像这样的简单方法 if q autocomplete Do something 然而 这个条件似乎总是返回 true if q hasClass a
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 在 ruamel.yaml 的列表元素中添加注释

    我使用 Python 在 YAML 文件的列表中动态添加元素 并且我想在我添加的每个元素旁边添加注释 以下是所有所需的格式 flow style example a b c first list d e second list block
  • flutter生成的3个APK有什么区别?

    我需要了解Android设备架构 以及为什么我使用时会生成三种不同类型的APK flutter build apk split per abi 当我使用 flutter build apk 我得到一个名为 fat APK 的大 APK 文件
  • Windows批处理文件:在for循环中设置变量

    我有许多具有相同命名方案的文件 作为示例 四个文件分别称为 num 001 001 txt num 002 001 txt num 002 002 txt num 002 003 txt 第一组数字代表它来自哪个 包 第二组数字只是用来区分