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


0

我是这个人的新手,所以我希望得到别人的帮助。

我在Windows Vista 32位版本上这样做。

我的桌面上有2个文件夹:folder_a(带有sed.exe)和带有这些文件的folder_b:

  • sand.txt
  • tree.txt
  • chair.txt
  • XYZ-fork.txt
  • XYZ-spoon.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。

我该怎么做?

Answers:


0

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

setlocal enabledelayedexpansion
        ︙
for %%f in (*) do (
    set tempname=%%f
    set tempname=!tempname:xyz=!
    if %%f == !tempname!  (把你的sed命令放在这里)  %%F
) 

setlocal 命令可以在批处理文件的开头, 或者就在之前 for 循环,或其间的任何地方。 (我建议把它放在批处理文件的开头, 就在这之后 @echo off。) 跑 cmd /?setlocal /? 有关此命令的更多信息。 基本上,它允许您以一种有点理智的方式处理循环中的变量。

我认为你对你理解的批处理文件了解得足够多 那 FOR  变量 IN( )DO 命令 循环遍历文件名 set (可以包括通配符,如 * ) 设置 variable 到每个文件名,并执行 command。 括号(后 do,最后) 让我们有一个多线 command。 普通变量语法不起作用 %% 变量 S, 所以我们复制 %%f 到一个临时变量。 然后我们使用 % 变量 STR1 = STR2 (查找和替换)变量扩展的形式 替换所有出现的 xyz%tempname% 用null。

... 除了 因为我们在一个循环中, 我们必须使用 ! 代替 % (这是在哪里 setlocal enabledelayedexpansion 进来)。 然后我们将删节的文件名与原始名称进行比较(仍在 %%f )。 如果它们是平等的,那么一定不能有任何实例 xyz 在文件名中,我们运行您的命令。 如果它们不同,那意味着替代 发现至少一个 xyz所以我们 运行你的命令。

附:我相信你不需要 call 命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.