2015-03-03 71 views
0

我有大约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 
+0

似乎'FINDSTR'命令将':'附加到结果,并且migth会导致问题。我一直在查找方法来替换或删除字符串在DOS中的字符串,但迄今没有发现任何有用的。 – user4317867 2015-03-03 07:39:44

回答

0
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 

在你的代码使用%%a两个参数ren命令,但第二个参数必须只包含的名称和扩展名,没有路径。你可以解决它使用%%~na,也就是文件名(不含路径或扩展名)通过%%a被引用的文件(%%~xa是扩展)

此外,如果字符串被发现一次以上任意文件,您的代码将尝试重命名文件两次(或更多)。最好使用findstr中的/m开关来检索文件列表。

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

+0

谢谢你们俩(也@ user4317867)。 – 2015-03-03 12:04:58

+0

我明白你的意思,并试图相应地更改我的代码。但是,我无法在我的文件夹中找到重命名的文件。由于它重命名文件,不应该在同一个文件夹中完成吗? 我的新代码看起来完全像MC ND代码。 CHCP 1252 SET sourcedir = P:\路径 FOR/F %%一个IN( 'FINDSTR/M/C: “3256”, “%sourcedir%\ * XML”')DO( ECHO %%一个 ECHO REN“%% a”“%%〜na_3256 %%〜xa” ) pause 今晚我得再试一次。希望很快找到解决方案/解释。 – 2015-03-03 12:07:12

+0

@an_ja,我的错,我忘了在答案中加入最后一行。现在更新。删除'ren'命令前缀的'echo'命令。 – 2015-03-03 12:19:24

0

荡它MC ND,之后我做了一些怪人脚本,来了:

试错与这个伟大的网站一起后,我设法想出(给予信贷DOS Batch : remove characters from string in a FOR loop

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