缺少通配符来让此批处理搜索所有子文件夹?

缺少通配符来让此批处理搜索所有子文件夹?

我从互联网上获取了一些脚本,构建了一些东西来搜索一个父文件夹下的所有文件夹,找到某些文件并将它们复制到新位置。(我们有一个目录,里面有无数个空文件夹和已占用的文件夹,我们试图在不手动搜索的情况下找到一些文件)

到目前为止,脚本可以正常工作,但前提是命名文件(来自 Names.txt 文档)直接位于父文件夹(...\source)下。如果它们位于父文件夹(...\source\folder1\folder2\etc)内的任何文件夹中,则不会搜索它们,也不会有任何结果。我遗漏了什么?

@echo off
pushd C:\Users\username\Desktop\TestBatches
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type Names.txt') do xcopy /hrkvy "%SourceFolder%\%%a" ".\destination"
popd
pause

在输入源路径时,我是否要在命令提示符中输入通配符?或者,我是否在批处理中输入一些可以自动执行此操作的内容?

我有点迷茫了。谢谢你的帮助!

答案1

我将在这里直接向您介绍一些高级批处理概念。
在下面的示例中,我使用批处理功能完成这项任务。这不是达到目标的最有效方法,但它会向你展示你做。我仍然很累,所以这个解决方案可能有点愚蠢(但它有效)

即使你不走这条路,也许“dir /s /b 文件掩码“就是您所寻找的。

@echo off
:: This assumes that this batch is in the same folder as Names.txt and the .\destination folder
:: This batch DOES NOT check things it should like the existence of %SourceFolder% or if .\destination even exists
Set ThisDir=%~DP0
Set DestinationDir=%ThisDir%\destination
Set NamesFile=%ThisDir%\Names.txt
Set /p SourceFolder=Enter the path of source folder and press [Enter]:
for /f "delims=" %%a in ('type %NamesFile%') do call :SearchName "%%a"
pause
goto :EOF

:: ----------------------------------------------------------------
:SearchName
pushd %SourceFolder%
for /f "delims=" %%f in ('dir /s /b %1') do call :FoundFile "%%f"
popd
goto :EOF

:: ----------------------------------------------------------------
:FoundFile
xcopy /hrkvy "%1" "%DestinationDir%"
goto :EOF

第一个 for 循环什么也不做,只是调用一个函数:搜索名称针对文本文件中的每个名称。

:搜索名称函数切换到“Set /p”指定的目录并执行“dir /s /b NAME_PASSED_FROM_TEXT_FILE”。它将获取的行(找到的文件)泵送到:找到文件功能。

:找到文件函数复制传递给它的文件。

相关内容