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

Windows 用于查找和替换多个子文件夹中的文件的Bat脚本-将.java文件替换为特定文件夹中的.class文件,windows,batch-file,cmd,windows-scripting,Windows,Batch File,Cmd,Windows Scripting,我不熟悉windows批处理脚本。。请在此场景中提供帮助 我的文件结构如下所示: dir1: c:\workspace\changeset\com\folder 子文件夹1 one.java 子文件夹-2 2.java dir2: c:\workspace\target\class\com\folder 子文件夹1 一级 子文件夹2 二级 子文件夹3 三级 需要从dir2文件(即1.class和2.class)中查找并替换相应子文件夹(即1.java和2.java)中的dir

我不熟悉windows批处理脚本。。请在此场景中提供帮助

我的文件结构如下所示:

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

子文件夹1

  • one.java
子文件夹-2

  • 2.java
dir2: c:\workspace\target\class\com\folder

子文件夹1

  • 一级
子文件夹2

  • 二级
子文件夹3

  • 三级
需要从dir2文件(即1.class和2.class)中查找并替换相应子文件夹(即1.java和2.java)中的dir1文件(需要用特定文件夹中的.class文件替换某些.java文件)

非常感谢你的帮助

谢谢 阿琼

所需的复制命令仅用于测试目的验证命令是否正确后,将
ECHO COPY
更改为
COPY
,以实际复制文件。追加
>nul
以抑制报告消息(例如,
1个复制的文件

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

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

如果另一个目录中存在名为namepartoffile.class的文件,请将该文件复制到第一个目录


请发布待解决的整个问题。这种方法可能会发生根本性的变化,就像在这种情况下一样

@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir1=U:\sourcedir\changeset”
设置“sourcedir2=U:\sourcedir\target”
对于/f“delims=”%%a IN(
'dir/b/s/a-d“%sourcedir1%\*.java”'
)做(
设置“javadir=%%~dpa”
设置“classfile=!javadir:%sourcedir1%=%sourcedir2%!%%~na.class”
如果存在!classfile!回显副本“!classfile!”“%%a”
)
后藤:EOF
您需要更改
sourcedir1
sourcedir2
的设置以适应您的环境


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

发布您所做的一切,谢谢Magoo。。我还有一个问题。。就像我们在dir1和dir2中有子文件夹一样。然后如何搜索.Java和.Class文件并将它们复制到各自的文件夹中。。。
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")
)