用于从多个目录复制和重命名文件的批处理文件
Batch file to copy and rename files from multiple directories
我之前曾为我的问题搜索过答案,但到目前为止还没有任何具体的答案。参见:Using xcopy to copy files from several directories to one directory, and 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
.
这可能吗?
这是此任务的简短批处理代码:
@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搜索外层FOR在子目录plots
中找到的每个子目录,如SIAE02203\plots
*.jpeg
个文件并将找到的所有 JPEG 文件复制到目录 Output
.
命令 COPY 的成功消息被重定向到设备 NUL 以抑制它。
目录 C:\Temp\Data
的输入示例结构:
- SIAE02203
- 地块
- 备份
- backup_plot.jpeg
- image.jpg
- plot.jpeg
- 图片
- image.jpg
- plot.jpeg
- photo.jpeg
- TIAE03208
- 地块
- another.jpeg
- ignored.jpg
- plot.jpeg
批量执行后C:\Temp\Data
的内容:
输出
- SIAE02203-plot.jpeg
- TIAE03208-another.jpeg
- TIAE03208-plot.jpeg
SIAE02203
- 地块
- 备份
- backup_plot.jpeg
- image.jpg
- plot.jpeg
- 图片
- image.jpg
- plot.jpeg
- photo.jpeg
- TIAE03208
- 地块
- another.jpeg
- ignored.jpg
- plot.jpeg
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
copy /?
echo /?
for /?
if /?
popd /?
pushd /?
另请参阅有关 Using command redirection operators 的 Microsoft 文章,了解对 >nul
的解释。
我之前曾为我的问题搜索过答案,但到目前为止还没有任何具体的答案。参见:Using xcopy to copy files from several directories to one directory, and 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
.
这可能吗?
这是此任务的简短批处理代码:
@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搜索外层FOR在子目录plots
中找到的每个子目录,如SIAE02203\plots
*.jpeg
个文件并将找到的所有 JPEG 文件复制到目录 Output
.
命令 COPY 的成功消息被重定向到设备 NUL 以抑制它。
目录 C:\Temp\Data
的输入示例结构:
- SIAE02203
- 地块
- 备份
- backup_plot.jpeg
- image.jpg
- plot.jpeg
- 备份
- 图片
- image.jpg
- plot.jpeg
- photo.jpeg
- 地块
- TIAE03208
- 地块
- another.jpeg
- ignored.jpg
- plot.jpeg
- 地块
批量执行后C:\Temp\Data
的内容:
输出
- SIAE02203-plot.jpeg
- TIAE03208-another.jpeg
- TIAE03208-plot.jpeg
SIAE02203
- 地块
- 备份
- backup_plot.jpeg
- image.jpg
- plot.jpeg
- 备份
- 图片
- image.jpg
- plot.jpeg
- photo.jpeg
- 地块
- TIAE03208
- 地块
- another.jpeg
- ignored.jpg
- plot.jpeg
- 地块
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
copy /?
echo /?
for /?
if /?
popd /?
pushd /?
另请参阅有关 Using command redirection operators 的 Microsoft 文章,了解对 >nul
的解释。