Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将文件夹从一个子目录批量移动到另一个包含相同编号的子目录_Batch File_Directory - Fatal编程技术网

Batch file 将文件夹从一个子目录批量移动到另一个包含相同编号的子目录

Batch file 将文件夹从一个子目录批量移动到另一个包含相同编号的子目录,batch-file,directory,Batch File,Directory,我有一个文件夹,想“合并”文件夹。 我的意思是:如果b\*\中存在一个文件夹,并且包含p\*\中某个文件夹的编号,请将文件夹从b移动到p e、 g.将b\p 11-20\11\u abc移动到p\p\u 11\u 20\11 我目前有: @Echo off SETLOCAL ENABLEDELAYEDEXPANSION cd /d "%~dp0" for /f %%a IN ('dir /b "%~dp0\p\"') do ( set &qu

我有一个文件夹,想“合并”文件夹。 我的意思是:如果b\*\中存在一个文件夹,并且包含p\*\中某个文件夹的编号,请将文件夹从b移动到p

e、 g.将
b\p 11-20\11\u abc
移动到
p\p\u 11\u 20\11

我目前有:

@Echo off

SETLOCAL ENABLEDELAYEDEXPANSION

cd /d "%~dp0"

for /f %%a IN ('dir /b "%~dp0\p\"') do (
    set "tmp=Y"
    for /f %%b IN ('dir /b "%~dp0\p\%%a\"') do if defined tmp (
        echo %%b
    )
    set "tmp="
)

这为我提供了数字(例如11,12,13,21,22,23),现在我需要一种方法来找出,如果一个文件夹在b\*\。。。与该前导号码一起存在。如果是,则需要将其移动到相应的p\*\。。。文件夹

我找到了一个解决方案。它不漂亮,也不是很快,但它完成了任务

我基本上做的是循环浏览\p中的每个文件夹。使用每个文件夹的编号,我循环\b中的每个文件夹。对于在\b\n中找到的每个文件夹,我检查它是否以当前\p\n文件夹的编号开头;如果是,请移动文件夹

@Echo off

SETLOCAL ENABLEDELAYEDEXPANSION

cd /d "%~dp0"

for /f "delims=" %%a IN ('dir /b "%~dp0p\"') do (
    set "tmp1=Y"
    for /f "delims=" %%b IN ('dir /b "%~dp0p\%%a\"') do if defined tmp1 (
        set "tmp2=Y"
        for /f "delims=" %%c IN ('dir /b "%~dp0b\"') do if defined tmp2 (
            set "tmp3=Y"
            for /f "delims=" %%d IN ('dir /b "%~dp0b\%%c\"') do if defined tmp3 (
                set "tmpstr=%%d"
                set "tmpstr=!tmpstr:~0,2!"
                if "!tmpstr!"=="%%b" (
                    echo moving folder %%d to %%b ...>>log.txt
                    echo moving folder %%d to %%b ...
                    move "%~dp0b\%%c\%%d" "%~dp0p\%%a\%%b"
                )
                
            )
            set "tmp3="
        )
        set "tmp2="
    )
    set "tmp1="
)

您应该从
cmd
@Gerhard中查看
robocopy/?
。感谢您的推荐。在今天的工作中,我接近于优化这个程序。我使用了2个嵌套for循环将\b\文件夹的所有路径写入一个.txt文件。然后我遍历所有\p\文件,并搜索.txt中是否有匹配的数字。这是快得多,但我被困在移动部分。我早上在一次额外的试驾中测试了这个程序,它成功了。当我下午运行程序时,移动部分(tryed xcopy,move,robocopy)不起作用,因为我想到了安全原因。我明天会详细调查的。