【问题标题】:Bat script to find and replace files in multiple subfolders - replace .java files with .class files from specific folder用于查找和替换多个子文件夹中的文件的 Bat 脚本 - 将 .java 文件替换为特定文件夹中的 .class 文件
【发布时间】:2017-04-14 08:40:37
【问题描述】:

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

我的文件结构如下::

目录 1: c:\workspace\changeset\com\文件夹

子文件夹 1

  • one.java

子文件夹 2

  • 两个.java

dir2: c:\workspace\target\class\com\文件夹

子文件夹 1

  • one.class

子文件夹2

  • 两个.class

子文件夹3

  • 三类

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

非常感谢您的帮助。

谢谢 阿琼

【问题讨论】:

  • 发布你到目前为止所做的事情

标签: windows batch-file cmd windows-scripting


【解决方案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 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO COPY 更改为COPY 以实际复制文件。附加>nul 以禁止报告消息(例如1 file copied

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

读取/b基本形式/a-d不带目录的每个文件名,并将文件名+扩展名分配给%%a

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


请发布要解决的整个问题。这种方法可以彻底改变,就像本例一样。

@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 的设置以适应您的情况。

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

【讨论】:

  • 谢谢 Magoo .. 我有另一个查询 .. 就像我们在 dir 1 和 dir 2 中有子文件夹。然后如何搜索 .Java 和 .Class 文件并将它们复制到相应的文件夹中.. .
猜你喜欢
  • 2013-06-26
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多