重命名文件并更改内容窗口批处理

时间:2014-02-10 16:55:33

标签: windows batch-file rename

我的问题似乎很简单,但到目前为止我在网上找不到有效的东西。

我有一个文件列表,例如

file0011.xml
doc0011.xml
toto0011.xml

在他们的身体中包含一些0011的出现。 我想在此期间:
- 用我想要的任何东西替换0011,比如0012
- 在所有文件中替换0011的所有出现的FAT。

因此,命令行看起来像mayBatch.bat 0011 0012

我找到了一些东西来替换多个文件中的一些文本部分,但只是“用于显示”。 所以我想我需要 - 解析文件夹中包含的文件以获取其名称
- 将第一个参数的出现替换为其名称中的第二个参数(ren函数?)
- 用第二个参数替换第一个参数的文件中包含的出现次数。

我的问题:我不知道如何在Windows批处理中做到这一点......你能帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在一些示例文件上测试它。

myBatch.bat 0011 0012.

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir *.xml /b /a-d') do (
   set "name=%%~nxa"
   ren "%%a" "!name:%1=%2!"
)

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET "line=%2"
IF NOT DEFINED line ECHO syntax %0 from to&GOTO :eof
SET "sourcedir=c:\sourcedir"
FOR /f "tokens=1*delims=" %%a IN ('dir /b /a-d "%sourcedir%\*%1.xml" ') DO (
 CALL :process %%1 %%2 "%%a"
)

GOTO :EOF

:process
SET "file=%~3"
CALL SET "file=%%file:%1=%2%%"
(
FOR /f "usebackqdelims=" %%x IN ("%sourcedir%\%~3") DO (
 SET "line=%%x"
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET "line=!line:%~1=%~2!"
 ECHO(!line!
 endlocal
)
)>"%sourcedir%\%file%"

GOTO :eof

您需要将源目录设置为显而易见的位置。如果目标文件名存在,则会毫不客气地覆盖目标文件名,因此会使用新名称和更改的内容创建新文件。保留原始文件,添加

del "%sourcedir%\%~3"

goto :eof例程中的:process之前,应该完成该操作。

(经过测试和验证,自然)