For loop Batch可将子文件夹中的所有文件复制到目标,而无需重新创建子文件夹

For loop Batch可将子文件夹中的所有文件复制到目标,而无需重新创建子文件夹,for-loop,batch-file,copy,robocopy,xcopy,For Loop,Batch File,Copy,Robocopy,Xcopy,我对批处理脚本还很陌生,但我目前正在处理一个批处理文件,当启动该文件时,我可以从菜单中选择源文件夹和目标文件夹。现在在我的源文件夹中,它有子目录,其中有更多的目录。我试图让批处理文件获取源文件夹中的任何和所有文件,并将它们复制到单个文件夹[Destination],而无需重新创建文件夹结构,以便源子目录中的所有文件都可以在目标处编译 我试过xcopy、robocopy,在一定程度上还试过循环。我的猜测是,它必须通过for循环来完成,但是我不确定应该使用什么样的代码来完成。我希望所有的文件类型都能

我对批处理脚本还很陌生,但我目前正在处理一个批处理文件,当启动该文件时,我可以从菜单中选择源文件夹和目标文件夹。现在在我的源文件夹中,它有子目录,其中有更多的目录。我试图让批处理文件获取源文件夹中的任何和所有文件,并将它们复制到单个文件夹[Destination],而无需重新创建文件夹结构,以便源子目录中的所有文件都可以在目标处编译

我试过xcopy、robocopy,在一定程度上还试过循环。我的猜测是,它必须通过for循环来完成,但是我不确定应该使用什么样的代码来完成。我希望所有的文件类型都能使用这个程序,而不仅仅是:jpg、jpeg、png和gif

谢谢你的帮助

@echo off
title File Copier
color 0a

:Menu
cls
echo Main Menu
echo ---------
echo Press 1 to copy files
echo.
echo Press 2 for information
echo.
echo Press 3 to exit
echo ---------------

set /p input=
if %input% == 1 goto 1
if %input% == 2 goto 2
if %input% == 3 goto 3
goto Menu

:1
rem Source
cls
echo Please select your source folder.
echo ---------------------------------
setlocal
set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please select your source folder:',0,0).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
setlocal enabledelayedexpansion
cls

rem Destination
echo Please select your destination folder.
echo --------------------------------------
set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please select your destination folder:',0,0).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder2=%%I"
setlocal enabledelayedexpansion
cls

rem Source/Destination Info
Set source=!folder!
Set target=!folder2!
Echo Source: %source%
Echo Destination: %target%
echo ---------------------------------------------------------------------

:Choice
set /P c=Would you like to proceed? [Y/N]
if /I "%c%" EQU "Y" goto Yes
if /I "%c%" EQU "N" goto No
goto Choice

:Yes
cls
rem echo D | xcopy %source% %target% /-y
rem robocopy "%source%" "%destination%" *.* /E
for /d %a in (%source%) do @copy %a\*.jpg %target%
for /d %a in (%source%) do @copy %a\*.png %target%
for /d %a in (%source%) do @copy %a\*.gif %target%
pause
goto Success

:No
goto 1

:Success
cls
echo The file(s) were successfully copied.
timeout /t 4 >nul
goto Menu

A可以是这样的,
对于(*.jpg,*.png,*.gif)中的/R“%source%”%%F,请复制“%%F”“%target%”
。请注意,该命令不适合在
%source%
或其子目录中的任何位置具有多个匹配文件名。我想我理解@Compo,因此只要所有源文件夹中的文件名都不同,丢失副本或错误的可能性就降低了?这个链接真的很有用,非常感谢@Mofi!