我的问题似乎很简单,但到目前为止我在网上找不到有效的东西。
我有一个文件列表,例如
file0011.xml
doc0011.xml
toto0011.xml
在他们的身体中包含一些0011
的出现。
我想在此期间:
- 用我想要的任何东西替换0011,比如0012
- 在所有文件中替换0011的所有出现的FAT。
因此,命令行看起来像mayBatch.bat 0011 0012
。
我找到了一些东西来替换多个文件中的一些文本部分,但只是“用于显示”。
所以我想我需要
- 解析文件夹中包含的文件以获取其名称
- 将第一个参数的出现替换为其名称中的第二个参数(ren函数?)
- 用第二个参数替换第一个参数的文件中包含的出现次数。
我的问题:我不知道如何在Windows批处理中做到这一点......你能帮助我吗?
谢谢!
答案 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
之前,应该完成该操作。
(经过测试和验证,自然)