根据部分名称列表搜索文件,并使用Windows shell将它们复制到目标文件夹

时间:2016-09-02 07:33:36

标签: windows shell batch-file

我是批量编程的绝对新手。我经过一些搜索后发布了这个问题。请指导我。 我有一个包含一千个图像的文件夹:

000001_x_abc1.jpg
000001_x_efg1.jpg
000001_x_hij1.jpg
000002_x_abc1.jpg
000002_x_efg1.jpg
000002_x_hij1.jpg
.
.
.
.
234562_x_abc2.jpg
234562_x_efg2.jpg
234562_x_hij2.jpg

这些文件中我生成了一个'文件列表'我需要根据部分名称,即数字ID - 文件名中的前6个数字值,例如234562 * .jpg,并将它们复制到目标文件夹。

注意:每个基于数字ID的搜索都应该给我3个文件,我需要复制这三个文件。任何帮助将不胜感激。

我根据搜索尝试了以下代码:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION

SET "DEST_DIR=my_desination"
SET "SEARCH_DIR=my_source"

FOR /F "tokens=*" %%a IN (%~dp0my_list.txt%) DO (
    FOR /R "%SEARCH_DIR%" %%f IN (*%%a*) DO (
        SET "SRC=%%~dpf"
        SET DEST=!SRC:%SEARCH_DIR%=%DEST_DIR%!
        xcopy /S /I "%%~f" "!DEST!"
    )
)

我的列表文件如下:

002631_*.jpg
054741_*.jpg
054992_*.jpg
055053_*.jpg
055054_*.jpg
055118_*.jpg
055267_*.jpg
055294_*.jpg
055382_*.jpg
055415_*.jpg
055466_*.jpg
055546_*.jpg

3 个答案:

答案 0 :(得分:1)

这是将特定文件复制到文件夹的示例。

 @ECHO OFF
set "SOURCE_DIR=%userprofile%\Desktop\Source"
set "DEST_DIR=%userprofile%\Desktop\Output"
set "FILENAMES_TO_COPY=test.txt test1.txt test2.txt"

pushd "%SOURCE_DIR%"
for %%F IN (%FILENAMES_TO_COPY%) do (
    echo file "%%F"
    xcopy /Y "%%F" "%DEST_DIR%\"
)
popd
pause

该脚本将test.txt test1.txttest2.txt从文件夹Source复制到文件夹Output

查看this

答案 1 :(得分:0)

假设列表文件每行包含一个完整的文件模式,以下内容适用于您:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Define constants here:
set "SOURCEDIR=D:\Data"
set "TARGETDIR=D:\BackUp"
set "LISTFILE=D:\files.lst"

cd /D "%SOURCEDIR%" || exit /B 1
for /F "usebackq delims= eol=|" %%L in ("%LISTFILE%") do (
    for /F "delims= eol=|" %%F in ('dir /B "%%L"') do (
       copy "%%~F" "%TARGETDIR%\%%~nxF"
    )
)

endlocal
exit /B

答案 2 :(得分:0)

(已编辑以反映问题中的其他信息)

for /f %%a in (partial.txt) do copy %%a "x:\destination folder\"

将文本文件中的每个条目复制<entry from textfile>到目的地。

有关详细信息,请参阅for /?