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
您需要更改sourcedir1 和sourcedir2 的设置以适应您的情况。
本质上,相同的方法和相同的 cmets 重新发送消息。不同之处在于,此过程使用dir 列表中的文件和子目录,并替换目录名的第一部分来导出.class 文件的预期名称。