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



我有大约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  
SET "sourcedir=P:path"
FOR /f "delims=" %%a IN ('findstr /m /c:"3256" "%sourcedir%*.xml"') DO (  
    ECHO REN "%%a" "%%~na_3256%%~xa"
)  
pause

在代码中,ren命令的两个参数都使用%%a,但第二个参数只能包含名称和扩展名,而不能包含路径。您可以使用%%~na来解决它,即%%a%%~xa是扩展名)引用的文件的文件名(没有路径或扩展名)

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

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

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

经过与这个伟大的网站的反复尝试,我设法想出了(归功于DOS批处理:在FOR循环中从字符串中删除字符)

@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!
)

最新更新