使用 .txt 文件批量将文件从源复制到目标
Batch To Copy Files From Source To Destination Using A .txt File
几乎准备放弃这个了。 :( 欢迎任何新想法或调整。
我有一个列出 .pdf 文件的 .txt 文件。 没有路径..只有文件名。
对于每个 .pdf,请在源文件夹 **和子目录 中查找
比赛。如果找到匹配项,请将 .pdf 复制到目标文件夹。
**源文件夹中的一些子目录名称中有 space。
我的脚本:
for /f %%i in (File-List.txt) do echo F| xcopy "C:\Source_Folder\%%i" "c:\Target\%%i" /i /z /y
结果:
它正在查找 .pdf 文件,但只搜索源中的第一个目录..而不是子目录?
@echo off
setlocal EnableDelayedExpansion
rem Create a list of subdirectories to search separated by semicolon (like PATH variable)
set "subdirs=C:\Source_Folder"
for /D /R "C:\Source_Folder" %%d in (*) do set "subdirs=!subdirs!;%%d"
rem For each .pdf in the text file
for /F "delims=" %%f in (File-List.txt) do (
rem Look in the list of subdirectories for a match
rem see HELP FOR for further details
for %%p in ("%%f") do set "filePath=%%~$subdirs:p"
rem If match found
if defined filePath (
rem Copy .pdf over to destination folder
copy "!filePath!" "c:\Target"
)
)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "targetdir=U:\destdir"
FOR /f %%a IN ("%sourcedir%") DO SET "drive=%%~da"
for /f "delims=" %%i in (q34868638.txt) do (
REM attrib /s "%sourcedir%\%%i"
FOR /f "tokens=1*delims=:" %%a IN ('attrib /s "%sourcedir%\%%i"') DO (
IF "%%a"=="File not found - %drive:~0,1%" (ECHO "%%i" NOT found) ELSE (
ECHO copy /b "%drive%%%b" "%targetdir%\"
)
)
)
GOTO :EOF
您需要更改 sourcedir
和 targetdir
的设置以适合您的情况。
我使用了一个名为 q34868638.txt
的文件,其中包含一些测试数据。您使用的文件名由您决定。
所需的 COPY 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)
几乎准备放弃这个了。 :( 欢迎任何新想法或调整。
我有一个列出 .pdf 文件的 .txt 文件。 没有路径..只有文件名。 对于每个 .pdf,请在源文件夹 **和子目录 中查找 比赛。如果找到匹配项,请将 .pdf 复制到目标文件夹。 **源文件夹中的一些子目录名称中有 space。
我的脚本:
for /f %%i in (File-List.txt) do echo F| xcopy "C:\Source_Folder\%%i" "c:\Target\%%i" /i /z /y
结果: 它正在查找 .pdf 文件,但只搜索源中的第一个目录..而不是子目录?
@echo off
setlocal EnableDelayedExpansion
rem Create a list of subdirectories to search separated by semicolon (like PATH variable)
set "subdirs=C:\Source_Folder"
for /D /R "C:\Source_Folder" %%d in (*) do set "subdirs=!subdirs!;%%d"
rem For each .pdf in the text file
for /F "delims=" %%f in (File-List.txt) do (
rem Look in the list of subdirectories for a match
rem see HELP FOR for further details
for %%p in ("%%f") do set "filePath=%%~$subdirs:p"
rem If match found
if defined filePath (
rem Copy .pdf over to destination folder
copy "!filePath!" "c:\Target"
)
)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "targetdir=U:\destdir"
FOR /f %%a IN ("%sourcedir%") DO SET "drive=%%~da"
for /f "delims=" %%i in (q34868638.txt) do (
REM attrib /s "%sourcedir%\%%i"
FOR /f "tokens=1*delims=:" %%a IN ('attrib /s "%sourcedir%\%%i"') DO (
IF "%%a"=="File not found - %drive:~0,1%" (ECHO "%%i" NOT found) ELSE (
ECHO copy /b "%drive%%%b" "%targetdir%\"
)
)
)
GOTO :EOF
您需要更改 sourcedir
和 targetdir
的设置以适合您的情况。
我使用了一个名为 q34868638.txt
的文件,其中包含一些测试数据。您使用的文件名由您决定。
所需的 COPY 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)