%%F 变量始终引用 FOR 循环中的最后一项而不是当前项

2023-12-10

这看起来应该相当简单,但我在 DOS 中使用 FOR 循环来正确报告它正在评估的当前项目时遇到困难。

我有一个简单的 DOS 批处理文件,它循环遍历目录中的所有文件并重命名它们。假设我的目录包含以下文件:

File1.txt
File2.txt
File3.txt

我想从每个文件中删除 TXT 扩展名。所以我的批处理命令看起来像这样:

@回声关闭

for %%F in ("*.txt") do (
  echo %%F
  set tmpFile=%%F
  echo %tmpFile%
  set newFile=%tmpFile:~0,-4%.xml
  echo %newFile%
)

我的预期输出是:

File1.txt
File1.txt
File1.xml
File2.txt
File2.txt
File2.xml
File3.txt
File3.txt
File3.xml

相反,输出是:

File1.txt
File3.txt
File3.xml
File2.txt
File3.txt
File3.xml
File3.txt
File3.txt
File3.xml

就好像将 %%F 设置为变量总是使用集合中的最后一个文件。

难道我做错了什么?请注意,我知道有更好的方法来简单地更改扩展名。我完成的批处理文件将执行更多操作,但我似乎无法完成这个初始步骤。


这是因为您正在设置和访问变量for loop.

您需要使用延迟扩展来访问它们,使用!的而不是%'s.

setlocal enabledelayedexpansion
for %%F in ("*.txt") do (
  echo %%F
  set tmpFile=%%F
  echo !tmpFile!
  set newFile=!tmpFile:~0,-4!.xml
  echo !newFile!
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

%%F 变量始终引用 FOR 循环中的最后一项而不是当前项 的相关文章

随机推荐

  • 如何使用打字稿在第三方类上定义方法?

    我正在尝试扩展第 3 方课程 但无法让打字稿发挥良好作用 基本上 我不能在新方法中使用类中已定义的任何现有方法 解决方法是重新定义现有方法extensions ts 见下文 但必须有更好的方法 第三方index d ts export as
  • 为什么转置日期格式为 dd/mm/yy 的数组会将某些日期更改为 mm/dd/yy 格式?

    行为 当我转置包含日期的一维数组以便将它们完整地打印到一张纸上时 某些日期会从dd mm yy to mm dd yyyy 特别是当该月的某一天 小于或等于12 例如January 2 2016 02 01 16 or May 11 201
  • 如何在服务器无法访问存储库的情况下从 git 存储库进行部署?

    我在 BitBucket git 存储库中有一个 PHP 项目 我在一个名为 开发 的分支中工作以进行小修复 或者在临时功能分支中工作 当我准备好部署时 我将这些分支合并到 master 中 我想让部署到我的实时站点变得如此简单 合并到 m
  • 为什么 javac“-source”标志不起作用?

    我正在测试javac source标志 我对它应该如何工作有点困惑 请参阅此代码作为示例 这是一个不兼容Java5代码的方法isEmpty 在该版本的 JDK 中没有为 String 定义 public class TestJavac pu
  • 在 beforeunload 事件处理程序中停止页面卸载

    在用户导航页面之前 代码会检查他是否编辑了某些表单字段 如果他这样做了 我会显示一个模式窗口Yes and No纽扣 如果他单击 否 模式应关闭并且用户仍保留在该窗口上 如果是 保存更改并卸载 window bind beforeunloa
  • 在我的 Mac 上的 gdb 7.6 上运行 make 时出错

    我在运行 make for gdb 时遇到以下错误 这是在我的 Mac 上运行配置后的结果 该 Mac 运行 OS X 10 8 5 和 i7 内部处理器 海湾合作委员会版本是 gcc v Configured with prefix Ap
  • 如何在MySQL 5 .7中实现CTE功能?

    我有一个 USERSEARCH 表 应该用于快速搜索用户的子字符串 此功能用于在有人输入用户名或姓名时进行自动完成搜索 但是 我感兴趣的查询只会显示搜索者关注的用户子集的匹配项 这可以在 USERRELATIONSHIP 表中找到 USER
  • Spring @Autowired(required = true) 为 null [重复]

    这个问题在这里已经有答案了 我有一个带有 JSF 2 结束 Spring 4 3 的网络模块 在我使用的支持豆中 Autowired用于 JAR 服务的 DI 在 EAR 模块中有 WAR JAR 和 ServiceSpring 和带有 S
  • 使用的目的是什么? [复制]

    这个问题在这里已经有答案了 DUPE C 中 using 的用法 我看到人们使用以下内容 我想知道它的目的是什么 是不是对象在被垃圾回收使用后就被销毁了 例子 using Something mySomething new Somethin
  • Laravel 4 嵌套资源控制器 Route::resource('admin/photo', 'PhotoController');不工作

    在 Laravel 4 中 我尝试设置嵌套资源控制器 in 路线 php Route resource admin photo Controllers Admin PhotoController in 应用程序 控制器 管理 PhotoCo
  • 访问 iframe 功能

    这个问题似乎只发生在chrome中 这是 iframe 代码 p lalalalallalala p 这就是我创建 iframe 的方式
  • Google Appengine 上的 Google Guice:使用工作 _ah 进行映射

    我有一个 Google Appengine Guice Wicket 应用程序 我的问题是 由于映射 我无法再访问 ah admin 页面 我的 Servlet 模块说 serve with WicketServlet class getW
  • Flutter 蓝牙外部条码扫描器

    我需要使用通过蓝牙连接到我的设备的外部条形码扫描仪 它被识别为键盘 它运行良好 我可以获取文本字段内条形码的内容 问题是我需要将焦点设置到 TextField 才能获取条形码的内容 有没有办法让当前屏幕监听键盘事件 这样我就可以获取数据而无
  • 如何缩放整个div?

    我现在正在玩一个函数这一页 如果您单击 who 部分 div 就会旋转 我希望它能够缩放并使用页面 这可能吗 如何才能做到这一点 旋转后 将其宽度和高度设置为页面的宽度和高度 who rotate angle 90 bind click f
  • 列表中的前 n 项(包括重复项)

    尝试找到一种有效的方法来获取一个非常大的列表中的前 N 个项目 可能包含重复项 我首先尝试了排序和切片 这很有效 但这似乎没有必要 如果您只想要前 20 名成员 则不需要对非常大的列表进行排序 所以我写了一个递归例程来构建 top n 列表
  • 无法让 document.execCommand('undo') 在浏览器中以相同的方式工作

    我有一些在文本框上实现上下文菜单的代码 上下文菜单有一个Undo and Redo通过使用调用浏览器本机方法的项目document execCommand undo 这段代码在基于 Chromium 的浏览器上按照我的要求运行 但在 Fir
  • 如何在 Hive 中按原始顺序选择行?

    我想从 mytable 中选择具有确定数字的原始行中的行 众所周知 关键字 limit 将随机选择行 mytable 中的行是按顺序排列的 我只想按原始顺序选择它们 例如 选择 10000 行 即从第 1 行到第 10000 行 如何实现这
  • 对象“_Global”的方法“Range”失败

    我试图循环遍历三个下拉列表中的项目 其中包含命名范围 A B 和 C 摘要输出根据所选下拉列表中的项目而变化 我想复制每个摘要输出 19 行 x 15 列的表格 并将它们粘贴到新工作表 表 3 中 例如 如果列表 A 中有 3 个项目 列表
  • 在 VueJS 中写入全局变量

    我在用 使用 VueJs 2 的全局数据作为我的起点 因为我只想读 写一个变量 我已在现有代码中添加了 click 事件来修改变量 但收到 未捕获的引用错误 myGlobalStuff 未定义 谁能看到我做错了什么 HTML div myG
  • %%F 变量始终引用 FOR 循环中的最后一项而不是当前项

    这看起来应该相当简单 但我在 DOS 中使用 FOR 循环来正确报告它正在评估的当前项目时遇到困难 我有一个简单的 DOS 批处理文件 它循环遍历目录中的所有文件并重命名它们 假设我的目录包含以下文件 File1 txt File2 txt