使用 Sed.exe 修改名称不以特定字符开头的文件

使用 Sed.exe 修改名称不以特定字符开头的文件

我对这些东西还很陌生,所以希望得到别人的帮助。

我在 Windows Vista 32 位版本上执行此操作。

我的桌面上有 2 个文件夹:folder_a(包含 sed.exe)和 folder_b,其中包含以下文件:

  • 沙.txt
  • 树.txt
  • 椅子.txt
  • xyz-fork.txt
  • xyz-勺子.txt

如果我使用以下字符串运行批处理文件:

call "C:\Users\X\Desktop\folder_a\sed.exe" -i "1c table-zeta" "C:\Users\X\Desktop\folder_b\*xyz*.txt

我可以更改文件名包含 xyz 的文件的第一行。

现在我想要做的是更改文件名不包含 xyz 的文件的第一行;在本例中只有 sand.txt、tree.txt 和 chair.txt。

我该如何做呢?

答案1

这可能有点不雅,但请将其放入批处理文件中:

设置本地启用延迟扩展
对于 %%f 在 (*) 中执行 (
    设置临时名称=%%f
    设置 tempname=!tempname:xyz=!
    如果 %%f == !tempname!(在此处输入您的 sed 命令)%%F

setlocal命令可以位于批处理文件的开头,也可以位于循环之前for,或者两者之间的任何位置。(我建议将其放在批处理文件的开头,紧跟在@echo off. 之后)。运行cmd /?setlocal /?获取有关此命令的更多信息。基本上,它可以让您以某种合理的方式处理循环中的变量。

我假设你对批处理文件有足够的了解,你明白 循环遍历文件名FOR variable IN (set) DO commandset(可以包括通配符,例如*),设置variable到每个文件名,并执行command。括号(在 之后do和末尾)让我们得到多行command。常规变量语法对 s 不起作用,因此我们将其复制到临时变量。然后我们使用变量扩展的(查找和替换)形式将s 中 的所有出现替换为 null。%%variable%%f%variable:str1=str2%xyz%tempname%

            …除了,因为我们处于循环中,所以我们必须使用!而不是% (这就是 的用武之地setlocal enabledelayedexpansion)。然后我们将缩写文件名与原始名称(仍在 中%%f)进行比较。如果它们相等,则文件名中一定不存在xyz ,因此我们运行您的命令。如果它们不同,则意味着替换至少找到一个xyz,因此我们运行你的命令。

PS,我相信您不需要该call命令。

相关内容