Batch file 批处理:查找具有特定内容的文件并扩展现有名称

Batch file 批处理:查找具有特定内容的文件并扩展现有名称,batch-file,rename,findstr,Batch File,Rename,Findstr,我有大约100个.xml文件,但它的文件名不是自解释的。因此,我想寻找一个特定的单词,并用这个单词扩展相关文件。 多亏了其他一些有用的条目,我可以部分地了解如何做到这一点,但不知何故,这些文件没有重命名 有人知道我的代码出了什么问题吗?先谢谢你 chcp 1252 SET sourcedir=P:\path FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO ( ECHO

我有大约100个.xml文件,但它的文件名不是自解释的。因此,我想寻找一个特定的单词,并用这个单词扩展相关文件。 多亏了其他一些有用的条目,我可以部分地了解如何做到这一点,但不知何故,这些文件没有重命名

有人知道我的代码出了什么问题吗?先谢谢你

 chcp 1252  
 SET sourcedir=P:\path  
 FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO (  
 ECHO (REN "%%a.xml" "%%a_3256.xml")  
 )  
 pause
chcp 1252
设置“sourcedir=P:\path”
对于/f“delims=“%%a IN('findstr/m/c:'3256”“%sourcedir%\*.xml”“)DO(
ECHO REN“%%a”“%%~na_3256%%~xa”
)  
暂停
在代码中,对
ren
命令的两个参数都使用
%%a
,但第二个参数必须只包含名称和扩展名,而不包含路径。您可以使用
%%~na
解决此问题,即
%%a
引用的文件的文件名(无路径或扩展名)(
%%~xa
是扩展名)

此外,如果在任何文件中多次找到该字符串,则代码将尝试重命名该文件两次(或更多)。最好使用
findstr
中的
/m
开关仅检索文件列表


重命名操作仅回显到控制台。如果输出正确,请删除
echo
命令。

Dang it MC ND,就在我编写了一些弗兰肯斯坦脚本之后,提出了:

在这个伟大的网站上反复尝试之后,我终于想出了(归功于)


似乎
FINDSTR
命令将
附加到结果中,这可能会导致问题。我一直在寻找在DOS中替换或删除字符串的方法,但到目前为止还没有找到任何有用的方法。谢谢你们(还有@user4317867)。我明白你们的意思,并尝试相应地更改我的代码。但是,在我的文件夹中找不到重命名的文件。既然它重命名了文件,这不应该在同一个文件夹中进行吗?我的新代码看起来完全像MC ND代码。chcp 1252设置sourcedir=P:[findstr/m/c:“3256”“%sourcedir%*.xml”“)中/f%%a的路径暂停(ECHO%%a ECHO REN“%%a”“%%~na_3256%%~xa”)今晚我必须再试一次。希望尽快找到解决方案/解释。@an_-ja,是我的错,我忘了在答案中加入最后一行。现在更新。删除作为
ren
命令前缀的
echo
命令。完美!它起作用了。非常感谢你。我正要开始处理批处理文件。这是一个很好的工具。
@ECHO OFF
set pathd=C:\SomePathHere
setlocal enabledelayedexpansion
for /f %%a in ('findstr /ic:SearchString %pathd%\*.xml') do (
set str=%%a
set str=!str:^:=!
echo !str!
)