我是Windows批处理脚本的新手..请帮助解决此问题
我的文件结构如下::
DIR1 : C:\工作空间\变更\ COM \文件夹
subfolder1
子目录-2
DIR2 : C:\工作空间\目标\类\ COM \文件夹
subfolder1
subfolder2
Subfolder3
需要在相应的子文件夹中找到并替换 dir1 文件,即来自 dir2 文件的one.java和two.java,即one.class和two.class(需要替换)某些带有来自特定文件夹的.class文件的.java文件)
非常感谢您的帮助。
由于 阿琼
答案 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
您需要更改sourcedir2
和dir
的设置以适合您的具体情况。
基本上,相同的方法和相同的评论重新发送消息。不同之处在于此过程使用.class
列表中的文件和子目录,并在导出config.json
文件的预期名称时替换目录名的第一部分。