从列表中递归搜索FOLDERS并移动

时间:2016-03-12 06:39:31

标签: batch-file

搜索所有子文件夹需要帮助。当前脚本工作正常,但只在顶级目录中。有什么帮助吗?

md "C:\users\%username%\desktop\People"
SET LOGFILE=C:\users\%username%\desktop\movelog.txt
for /f "delims=" %%i in (people.txt) do (
    move "%%i" C:\users\%username%\desktop\People >nul 2>&1
    if errorlevel 1 (
        echo %%i : Move failed >> %LOGFILE%%
    ) else (
        echo %%i : Move successful >> %LOGFILE%
    )
)

1 个答案:

答案 0 :(得分:0)

假设我正确阅读您的问题,您希望能够使用任何位置的脚本来查找文本文件中指定的文件夹,以便将其移动到新位置吗?在linux机器上,一个简单的find * "foldername"|grep "foldername"将提供可用的代码来查找您要查找的文件。 Windows确实有类似的东西,但不像linux版本那么容易。

您可以使用以下代码dir \ /A:D /B /S /O:G|find "%%i"递归搜索该文件夹。但是,代码将输出传递给它的特定字符串的所有实例,其中包括特定文件夹内容中的所有内容的文件路径。您要问的是将该名称下的所有文件夹移动到新位置。

因此,需要在每个用户文件夹中都有某种标识符,以便让排序程序知道这就是我正在寻找的东西。如果我有一个空白在所有特定文件夹中标记为marker.txt的文本文件,我可以将代码作为dir \ /B /S|find "%%i\marker.txt"运行,这为搜索程序提供了一个唯一标记来识别。这可以存储并稍后排序到变量中,例如我有一个marker.txt然后我可以运行一个简单的set path=dir \ /B /S|find "%%i\marker",并将新的运动变量设为move %path%\..。因此,除非您拥有一个通常由所有这些共享的文件,否则您可能会发现很难对它们进行排序。