如何处理文件名中的破折号

2024-04-10

在装有 Windows 7 的 PC 上,我使用一个简单的批处理脚本来重命名一些 Excel 文件,并在其父文件夹名称前面添加:

for /f "delims=" %%i in ('dir /b /AD') do (
    cd "%%i"
    for /f "delims=" %%j in ('dir /b *.xl*') do ren "%%~j" "%%i_%%~j"
    cd..
)

我注意到某些文件生成了错误“系统找不到指定的文件”。这些文件的文件名中都有一个破折号 (—)。当我使用 Windows 资源管理器将破折号更改为常规连字符 (-) 后,脚本在这些文件上运行良好。

我如何帮助编写这些文件的重命名脚本?


您的问题不在于批处理变量:从命令行可以正常工作:

for %i in (*) do ren "%~i" "test_%~i"

但是,从以下内容可以看出:

for /f "delims=" %i in ('dir /b /a-d') do @echo ren "%~i" "test2_%~i"

dir /b正在将破折号更改为连字符,因此ren命令显然找不到要更改的文件。

对于您的示例,您应该找到:

for /d %%i in (*) do (

and

for %%j in (*.xl*) do ...

应该可以正常工作。

如果您需要dir /b由于其他原因,我现在没有看到解决方案。

(I had a convoluted attempt exchanging all hyphens for question marks, using the "Environment variable substitution" and "delayed environment variable expansion" as described in SET /? and CMD /?, allowing any character to match, and then again use ren pattern matching to ignore the problem.

I.e.

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%I in ('dir /b /a-d') do (
 Set K=%%I
 ren "!K:-=?!" "test2_!K:-=?!"
)

but ren * x* replaces the start of the files with x, so the above replaces the hyphens with the content at that location before test_ was inserted.

So the best this approach can do is convert the em dashes to hyphens with:

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%I in ('dir /b /a-d') do (
 Set K=%%I
 ren "!K:-=?!" "test2_!K!"
)

)

并确认它是输出dir /b这就是问题所在:在命令行上:

dir /b *—* > test.txt

在那里是一个破折号,只会列出带有破折号的文件,但是,在输出文件中,例如Notepad test.txt,您只会找到连字符,而不会找到破折号。

顺便说一句,我已经在 Windows 8.1 上完成了所有这些测试VER显示为Microsoft Windows [Version 6.3.9600].

(As I mention above I did have ren * x* in this answer, but that replaces the first character with x rather than insert it, which I always thought ren did!)

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

如何处理文件名中的破折号 的相关文章

  • 如何安装适用于 Windows C++ 的最新版本 OpenGL?

    我正在使用 Visual Studio 2010 运行 Windows 7 包含的 OpenGL 版本 include 是版本 1 1 我希望使用合理的当前版本 某种版本 3 或 4 我需要做什么才能达到该状态 OpenGL SDK 页面位
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是
  • 类似于eternity的C++对象持久化库

    我正在寻找一个 C 对象持久库来替换永恒图书馆 http sourceforge net projects eternity it 我已经用它制作了大约一天的原型 永恒图书馆的能力不足 我创建了一个与此类似的对象层次结构 我有一个std l
  • cygwin winsymlinks:本机不起作用

    我现在和 cygwin 斗争了很长一段时间 我广泛搜索了如何让 cygwin 创建 Windows 风格的符号链接 我尝试了以下方法 export CYGWIN winsymlinks native export CYGWIN winsym
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • (此时出乎意料 - 批处理脚本

    我正在使用下面的批处理脚本并收到错误 这时候是出乎意料的 我知道问题出在第一行 但我不明白出了什么问题 有任何想法吗 script IF 1 LOOP1 SET P isDefault Value Missing do you want t
  • 检测 Windows 重新启动是否是由于 Windows 更新造成的

    我的电脑上的一些应用程序一直在检测 Windows 更新是否重新启动 这是可以观察到的 因为它们会在 Windows 更新自动重启后重新启动 这非常有帮助 因为这些应用程序会重新加载更改 甚至unsaved更改或恢复选项卡 如果是浏览器 执
  • 如何清除通过“set /p var1=”从命令行设置的变量

    在 Windows 批处理文件中 我接受来自用户输入的变量set p var1 after var1已使用 我不知道如何重置 清除其值 如果我不重置 清除它的值 当用户遇到set p var1 再次 用户直接输入 之前的输入值仍然存在 我不
  • Windows 7 VM 上的 Android Studio 虚拟设备不兼容

    我的计算机上有一个 VirtualBox VM 该 VM 运行 Windows 7 64 位 我在该虚拟机上安装了 Android Studio 我只有基本的 Hello World 应用程序 当我尝试运行 AVD 时 我收到以下消息 运行
  • LOCALAPPDATA 中的 File.ReadAllBytes UnauthorizedAccessException“对路径的访问被拒绝”

    同一用户在同一台 机器上读取文件时 会间歇性地发生此异常 LOCALAPPDATA Research 我已经检查了该标题当前提供的所有可能的重复项 有很多 有一个与读取 AES 加密文件 https stackoverflow com qu
  • 如何使用 Windows forfiles 命令的完整路径运行命令?

    我正在尝试运行以下命令 forfiles p Schemas m xsd c cmd c C Program Files x86 Microsoft SDKs Windows v10 0A bin NETFX 4 6 1 Tools xsd
  • 从 Windows 批处理文件中检测 ANSI 兼容控制台?

    Windows 10 控制台主机 conhost exe has 对 ANSI 转义序列的本机支持 https msdn microsoft com en us library windows desktop mt638032 aspx 旧
  • 操作系统崩溃的常见原因[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解 操作系统崩溃 不限于Windows崩溃 最常见的技术原因 从操作系统编程的角度 有哪些 我正在寻找一个不像 打开太多应用
  • 构建 jar 后无法运行 exe

    我制作了一个简单的实用应用程序 其中我有一个要运行的exe文件 我通过使用它来运行 Runtime getRuntime exec this getClass getResource filename exe getPath 当我从 ide
  • 如何用C语言测量时间?

    我想知道某个代码块执行了多长时间 大约 像这样的事情 startStopwatch do some calculations stopStopwatch printf lf timeMesuredInSeconds How 您可以使用clo
  • 枚举nodejs中的系统驱动器

    有没有办法检索计算机上所有逻辑驱动器的驱动器名称 我查看了 fs api 但从那里我只能枚举给定目录的文件和目录 我不确定 驱动器名称 是什么意思 如果您的意思是以下形式的驱动器 PhysicalDriveN 我遇到了同样的问题并实现了这个
  • 批处理 - 默认浏览器?

    有没有办法使用批处理文件查找我的计算机上的默认浏览器 只需使用 启动 www google com See here http social msdn microsoft com Forums is iewebdevelopment thr
  • 模拟后 CreateMutex 失败

    这是我尝试模拟用户然后创建互斥体的代码 未创建互斥体 我收到 ERROR ACCESS DENIED 错误 void Impersonate DWORD logonType LOGON32 LOGON INTERACTIVE DWORD l
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取

随机推荐

  • 如何将 pandas 中的日期时间列全部转换为同一时区

    我有一个带有日期时间列的数据框 带有不同格式的时区 时区似乎是 UTC 但我想将该列转换为pd to datetime但这是失败的 这是问题 1 由于失败 我无法在该时间段上执行任何日期时间操作 例如按日期对列进行分组 计算出天数 按一天中
  • 如何使用 h5py 保存不同形状的 numpy.arrays 列表?

    我正在使用 h5py 将大型图像数据集 flickr25k 数据集 保存到 hdf5 中 但是图像大小不同 因此我无法创建具有形状的数据集 nb images height width 现在我正在使用多个数据集来处理这个问题 因此creat
  • 如何防止 xsl-fo 中的页脚溢出?

    我正在从我的 xsl 和 xml 文件生成一个 pdf 其中我需要在第一页末尾显示一个表格 但由于该表上方还有一些表 因此将其显示为静态文本会将其下推到第二页 或第三页 依此类推 所以我想把这个表作为页脚 就在第一页上 因此 我将此表定义为
  • dyld:未加载库:lib/libopencv_core.3.0.dylib 原因:未找到图像

    我遇到以下问题 Users luke Desktop trainHOG trainhog exit dyld Library not loaded lib libopencv core 3 0 dylib Referenced from U
  • 带参数执行

    我在 Java 中执行需要参数的批处理文件时遇到困难 这些参数可能包含空格 因此我需要将它们用引号引起来 我还需要对 Linux 执行相同的操作 因为某些参数可能包含特殊字符 例如 非功能性 Windows 代码 ProcessBuilde
  • Ruby 2.0 中正确的哈希语法是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我应该使用
  • Inno Setup:如何观察变量值或写入调试输出?

    在 Inno Setup 中调试时如何观察变量的值 如何打印一些内容来调试输出 Thanks 目前没有调试监视窗口 但当调试器在断点处停止时 您只需将鼠标悬停在要检查的变量上即可 要将某些内容打印到调试输出 请使用Log http jrso
  • 让 jQuery 插件在动态添加的元素上工作

    好吧 我有这个插件 http timeago yarp com 它可以在现有元素上正常工作 但是 当我动态添加元素时 效果不会应用于该新元素 如何使插件在动态添加的元素上工作 该插件的语法是 abbr timeago timeago 这是添
  • Python 字符串和列表

    几天来一直在解决这个小问题 我不知道我是否全错了或者只是错过了一些东西 目标 从句子中的每个单词中 找到第一个元音 从单词中删除该元音后面的字母 并将剩余字母乘以 3 这个例子 如果我有一句话 Hello World 想要的输出应该是 He
  • 如何直接从 Android Wear 通过 WiFi 发出 HTTP 请求?

    如何在 Android Wear 上执行 HTTP 请求或打开套接字 我曾经认为这是不可能的但是应用程序说以下内容 如果您有配备 Android Wear 5 1 和 WiFi 的智能手表 即使您的手机处于关闭状态 也能正常工作 我测试了它
  • Java 应用程序可以使用 Aero Glass 效果吗?

    基于Swing的Java能否在Windows Vista 7下实现Aero Glass效果作为背景 从 Java SE 6 开始 Swing 的 Windows 原生外观使用 Aero Chet Haase 发表了一篇博客文章 其中包含有关
  • 线程“main”中出现异常 java.lang.SecurityException:禁止的包名称:java.lang

    我是 Java 新手 我有一个程序返回以下错误 我完全无法弄清楚 我用谷歌搜索了一切 你们能帮我吗 package java lang public class S1 public static void main String args
  • Rails 并发请求

    所以我有一个 Rails 应用程序可以解析一个长 json 文件 在此期间它向外部 API 发送请求 这似乎需要很长时间 我的问题是 是否像将每个请求放入单独的线程中以加快速度一样简单 我不明白为什么我不能同时运行 3 或 4 个线程来发送
  • jQuery 排序导致 iOS Safari 冻结

    我有一个页面使用 jQuery 加载 XML 文件 然后将其内容输出到页面 最近 我在输出中添加了排序功能 导致 iPod Touch 上的 Safari 挂起 1 分钟以上或 2 分钟以上 取决于我排序的字段数量 而在 iPad 上挂起不
  • 无法调试,致命信号 6 (SIGABRT) 位于 0x00007c37(代码=-6)

    我遇到了以下情况 无法调试 Android 应用程序 我可以运行它 但无法调试它 我开始了全新的项目 复制了所有内容并且它有效 意味着能够调试 但又得到了这个 我在模拟器和手机上都尝试过 但没有成功 我使用的是Android Studio
  • Angular 2 - ngShow 等效吗? [复制]

    这个问题在这里已经有答案了 根据我对文档的解释 如果我希望能够默认隐藏一个元素 并在单击链接时显示该元素 那么以下应该可以工作吗 在 app app component ts 中 newTrustFormVisible false 在 ap
  • 在哪里可以找到“Microsoft.VisualStudio.TestTools.UnitTesting”缺失的 dll?

    我的 C Visual Studio 项目中出现以下错误 命名空间 Microsoft 中不存在类型或命名空间名称 VisualStudio 是否缺少程序集引用 我还尝试查找 microsoft dll 文件 但找不到任何参考 我是否搜索了
  • 容器和包装的区别

    在编程语言 例如 Java 中 有什么区别container and wrapper 或者有什么区别 我听过这两个术语的使用都很模糊 在编程语言中这个词容器通常用于可以包含多个元素的结构 例如Map a Set or a List 这些结构
  • Python:使用正则表达式获取列表索引?

    在Python中 如何获取列表中项目的位置 使用list index 使用模糊匹配 例如 如何获取以下形式的所有水果的索引 berry在下面的列表中 fruit list raspberry apple strawberry Is it p
  • 如何处理文件名中的破折号

    在装有 Windows 7 的 PC 上 我使用一个简单的批处理脚本来重命名一些 Excel 文件 并在其父文件夹名称前面添加 for f delims i in dir b AD do cd i for f delims j in dir