繁体   English   中英

批处理文件以递归方式复制/重命名目录并查找/替换文件内容

[英]Batch file to copy/rename directory recursively and find/replace file contents

需要一个 Windows 批处理文件来复制目录树并将给定的 old_name 的出现重命名为给定的 new_name,请参见下面的示例。 我看着robocopyxcopy无济于事

String old = "old_name";
String new = "new_name";

current directory:
C:\old_name
C:\old_name\table
C:\old_name\garage\old_name\chair\a.file (contains text I am OLD_NAME)
C:\old_name\garage\old_name\b.file (contains text I am old_name)

desired outcome:
C:\new_name
C:\new_name\table
C:\new_name\garage\new_name\chair\a.file (contains text I am NEW_NAME)
C:\new_name\garage\new_name\b.file (contains text I am new_name)

编辑:在路径中显示一个未更改为新名称的节点。

old_name=twintyone

新名称=一

C:\\Users\\fredJ\\AndroidStudioProjects\\one\\app\\src\\main\\java\\mx\\com\\businessman\\twintyone

我不知道有任何一个实用程序可以完成您想要的所有操作,但是如果您部署了我的JREPL.BATJREN.BAT实用程序,那么一个简单的批处理脚本就可以轻松高效地实现您的目标。

JREPL.BAT 和 JREN.BAT 都是混合 JScript/批处理脚本,可以在 XP 以后的任何 Windows 机器上本地运行 - 无需复制或安装可执行文件。

批处理脚本有 3 个简单的步骤:

  1. 使用 XCOPY 复制您的目录树
  2. 使用 JREN.BAT 将 OLD_NAME 文件夹适当地重命名为 NEW_NAME
  3. 使用 FINDSTR 识别包含 OLD_NAME 的文件,使用 FOR /F 迭代结果,并使用 JREPL.BAT 编辑每个找到的文件

我还添加了一些 ECHO 语句,以便您可以了解进度

注意 - 以下内容未经测试。 如果有错误,应该有一个简单的修复 - 基本设计是合理的

@echo off
set "old=OLD_NAME"
set "new=NEW_NAME"
xcopy "c:\%old%\*" "c:\%new%" /i /s
call jren "^.+" "%new%" /d /s /p "c:\%new%" /fm "%old%"
for /f "delims=" %%F in ('findstr /mspc:"%old%" "c:\%new%\*"') do (
  echo Editing "%%F"
  call jrepl "%old%" "%new" /l /f "%%F" /o -
)
echo(
echo Done!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM