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

时间:2017-04-14 08:40:38

标签: windows batch-file cmd windows-scripting

我是Windows批处理脚本的新手..请帮助解决此问题

我的文件结构如下::

DIR1 : C:\工作空间\变更\ COM \文件夹

subfolder1

  • one.java

子目录-2

  • two.java

DIR2 : C:\工作空间\目标\类\ COM \文件夹

subfolder1

  • one.class

subfolder2

  • two.class

Subfolder3

  • three.class

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

非常感谢您的帮助。

由于 阿琼

1 个答案:

答案 0 :(得分:1)

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命令仅为ECHO在您确认命令正确后,将ECHO COPY更改为COPY以实际复制文件。附加>nul以取消报告消息(例如1 file copied

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

阅读/a-d基本格式%%a中没有目录的每个文件名,并将文件名+扩展名分配给@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

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

请发布要解决的整个问题。这种方法可以根本改变,就像在这种情况下一样。

sourcedir1

您需要更改sourcedir2dir的设置以适合您的具体情况。

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