这可能有点不优雅,但将其放入批处理文件中: 
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 命令。