我之前搜索过我的问题的答案,但是到目前为止还没有具体回答。请参阅:Using xcopy to copy files from several directories to one directory和Batch file to copy files from one folder to another folder。
在一个目录(Data
)中,我专门命名了多个目录,例如(SIAE02203
)包含通常命名的.JPEG文件(plot.jpeg
)。我希望创建一个能够遍历每个目录的批处理文件,找到,复制并重命名plot.jpeg
文件和父文件夹名称。
因此plot.jpeg
变为SIAE02203-plot.jpeg
。
目录的结构如下:Data\SIAE02203\plots\plot.jpeg
。
我希望将重命名的文件复制到Data\Output
。
这有可能吗?
答案 0 :(得分:2)
以下是此任务的简短批处理代码:
@echo off
pushd "C:\Temp\Data"
if not exist "Output\*" md Output
for /D %%D in (*) do (
if /I not "%%D" == "Output" (
for %%J in ("%%D\plots\*.jpeg") do (
copy /B /Y "%%~fJ" "Output\%%D-%%~nxJ" >nul
)
)
)
popd
在第二行指定目录Data
的路径。
批处理文件首先创建目录Output
(如果尚未存在)。
下一个命令 FOR 用于在目录Data
的每个子目录上处理更多命令。使用 IF 条件跳过子目录Output
。
内部 FOR 搜索plots
子目录SIAE02203\plots
中外部 FOR 找到的每个子目录,用于*.jpeg
个文件和副本所有找到的JPEG文件到目录Output
。
命令 COPY 的成功消息被重定向到设备 NUL 以禁止它。
目录C:\Temp\Data
的输入示例结构:
批处理执行后C:\Temp\Data
的内容:
<强>输出强>
<强> SIAE02203 强>
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
copy /?
echo /?
for /?
if /?
popd /?
pushd /?
有关>nul
的解释,请参阅Microsoft文章Using command redirection operators。