windows - 在子文件夹中搜索请求的文件并复制到目标
问题描述
我正在尝试将 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
解决方案
我看不出您发布的代码有任何明显错误,尽管有可能出现错误。您没有提供足够的信息,包括当前目录、文本文件的内容、脚本的调用方式或任何调试信息。
以下版本的代码要求您将文件列表文本文件放入第五行的变量定义中。我假设批处理文件与文件列表位于同一位置,因此使用%~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
随意尝试代码,如果仍然无法按预期工作,请提供一些适当的调试信息。
推荐阅读
- javascript - 反向滚动时再次播放动画
- powershell - 如何更改我的 Powershell 脚本,以便它以 ANSI - Windows-1252 编码写入输出文件?
- python - 为什么我不能导入模块?
- java - Servlet 发送请求后没有正确响应
- python - 并行化火花中的循环
- angular - 如何在不重构的情况下处理 Angular 2+ (7) 路由更改?
- sql - ssrs 多值参数
- c++ - 如何一次定义几个仅名称不同的函数(不使用宏)?
- raku - 为什么我的 Promise(开始块)中的所有 shell 进程都没有运行?(这是一个错误吗?)
- python - 如何使用python检查电子邮件ID列表并删除乱码/大写字母