用于查找和替换多个子文件夹中文件的 Bat 脚本 - 将 .java 文件替换为特定文件夹中的 .class 文件

Bat script to find and replace files in multiple subfolders - replace .java files with .class files from specific folder

我是 windows 批处理脚本的新手.. 请帮助解决这个问题

我的文件结构如下::

dir1: c:\workspace\changeset\com\folder

子文件夹1

子文件夹-2

dir2: c:\workspace\target\class\com\folder

子文件夹1

子文件夹2

子文件夹3

需要在相应的子文件夹中查找并替换 dir1 文件,即 dir2 文件中的 one.java 和 two.java即 one.class 和 two.class(需要用特定文件夹中的 .class 文件替换某些 .java 文件)

非常感谢您的帮助。

谢谢 阿俊

for /f "delims=" %%a in ('dir /b /a-d "c:\workspace\changeset\com\folder\*.java"') do (
 if exist "c:\workspace\target\class\com\folder\%%~na.class" (
  echo copy "c:\workspace\target\class\com\folder\%%~na.class" "c:\workspace\changeset\com\folder\%%a")
)

所需的 COPY 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO COPY更改为COPY以实际复制文件。附加 >nul 以禁止报告消息(例如 1 file copied

请注意,直接从提示执行和使用批处理文件执行是不同的。 metavariable(循环控制变量)%%x 对于批处理行必须引用为 %%x,如果从命令提示符执行则必须引用为 %x。由于从提示中重复执行包含 for 的行毫无意义(创建批处理文件更容易),因此我使用 post 批处理文件版本。如果需要,用户有责任针对直接提示进行调整。

读取 /b 基本格式 /a-d 中没有目录的每个文件名,并将文件名+扩展名分配给 %%a.

如果另一个目录中存在名为thenamepartofthefile.class的文件,则将that文件复制到第一个目录.


请post解决整个问题。这种方法可以从根本上改变,就像在这种情况下一样。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir1=U:\sourcedir\changeset"
SET "sourcedir2=U:\sourcedir\target"
FOR /f "delims=" %%a IN (
 'dir /b /s /a-d "%sourcedir1%\*.java" '
 ) DO (
 SET "javadir=%%~dpa"
 SET "classfile=!javadir:%sourcedir1%=%sourcedir2%!%%~na.class"
 IF EXIST !classfile! ECHO COPY "!classfile!" "%%a"
)

GOTO :EOF

您需要更改 sourcedir1sourcedir2 的设置以适合您的情况。

本质上,相同的方法和相同的评论都是消息。不同之处在于此过程使用 dir 列表中的文件和子目录,并在导出 .class 文件的预期名称时替换目录名的第一部分。