首页 > 解决方案 > 在子文件夹中搜索请求的文件并复制到目标

问题描述

我正在尝试将 file_list.txt 中列出的文件从源位置复制到目标文件夹,源文件夹有子文件夹。我的批处理应该能够搜索源子文件夹中的文件并复制到目标文件夹。复制所有扩展名为 .exe 的文件也是如此。我的代码有什么问题。我想,我错过了搜索子文件夹数据。不知道命令是什么。请帮忙。

@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
@color 0a
cls

set "dest=D:\destination"
set /p source=Select source path:


for /R %%f in (%source%/*.exe) do copy %%f "%dest%"

echo Copy requested files

for /f %%f in (file_list.txt) do (

    for /f "tokens=*" %%F IN ('dir /S /B /A:-D "%source%/%%f"') Do (
                copy "%%F" "%dest%\%USERNAME%"      
    )
)

pause

ENDLOCAL

标签: windowsbatch-file

解决方案


我看不出您发布的代码有任何明显错误,尽管有可能出现错误。您没有提供足够的信息,包括当前目录、文本文件的内容、脚本的调用方式或任何调试信息。

以下版本的代码要求您将文件列表文本文件放入第五行的变量定义中。我假设批处理文件与文件列表位于同一位置,因此使用%~dp0. 如果它在当前目录中,则将其替换为%CD%\,如果两者都不是,则显然是完全限定的绝对路径。

接下来,我使用一些验证来尝试确保源、目标和用户输入存在。然后输入位置将成为当前目录。

然后运行您提供的命令,然后将当前目录返回到其原始位置。

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Color 0A

Set "listdir=%~dp0filelist.txt"
Set "dest=D:\destination"

If Not Exist "%listdir%" GoTo :EOF
If Not Exist "%dest%\" GoTo :EOF

:Ask
ClS
Set "source="
Set /P "source=Select source path: "
If Not Defined source GoTo Ask
PushD "%source:"=%" 2> NUL || GoTo Ask

For /R %%G In (*.exe) Do Copy /Y "%%G" "%dest%"
Echo Copy requested files
For /F "UseBackQ EOL=? Delims=" %%G In ("%listdir%"
) Do For /F "Delims=" %%H In ('Dir "%%~nxG" /S /B /A:-D 2^> NUL'
) Do Copy /Y "%%H" "%dest%\%UserName%"

PopD

Pause

随意尝试代码,如果仍然无法按预期工作,请提供一些适当的调试信息。


推荐阅读