Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 如何仅使用cmd从子文件夹复制文件?_Batch File_Cmd - Fatal编程技术网

Batch file 如何仅使用cmd从子文件夹复制文件?

Batch file 如何仅使用cmd从子文件夹复制文件?,batch-file,cmd,Batch File,Cmd,我的文件夹结构如下: -MainDir -f0 -f0 -f0 -a.txt -b.txt -c.txt -f1 -f1 -f1 -aa.txt -bb.txt -cc.txt 如果你在上面看到我的文件在第三个文件夹中的层次结构。现在我的要求是只能将主文件夹及其文件复制到其他位置。例如:上述结构的输出应如下所示: -MainDir -f0 -a.txt -b.txt -

我的文件夹结构如下:

-MainDir
  -f0
   -f0
    -f0
     -a.txt
     -b.txt
     -c.txt
  -f1
   -f1
    -f1
     -aa.txt
     -bb.txt
     -cc.txt
如果你在上面看到我的文件在第三个文件夹中的层次结构。现在我的要求是只能将主文件夹及其文件复制到其他位置。例如:上述结构的输出应如下所示:

-MainDir
   -f0
    -a.txt
    -b.txt
    -c.txt
   -f1
    -aa.txt
    -bb.txt
    -cc.txt

但当我尝试使用XCOPY时,所有文件夹都会按原样复制。因此,我试图找到一种方法来实现我的目标文件夹结构,如上图所示。下面将循环main下的目录,查找所有文件,并将它们全部放在目标中最顶层的子目录中,正如您所寻找的:

CMD脚本:

@(SETLOCAL
  ECHO OFF
  SET "_MainDir=C:\Main\Dir"
  SET "_DestDir=%Temp%\Destination\Main\Dir"
)

FOR /D %%A in (
  %_MainDir%\*
) DO (
  IF NOT EXIST "%_DestDir%\%%~nxA" MD "%_DestDir%\%%~nxA"
  FOR /F %%a IN ('
    DIR /A-D /S /B "%%~fA\*"
  ') DO (
    ECHO Copying: "%%~fa"
    ECHO To: "%_DestDir%\%%~nxA\%%~nxa"
    COPY /B /V /Y "%%~fa" "%_DestDir%\%%~nxA\%%~nxa"
  )
)

以下内容将循环main下的目录,查找所有文件,并将它们全部放在您要查找的目标中最顶层的子目录中:

CMD脚本:

@(SETLOCAL
  ECHO OFF
  SET "_MainDir=C:\Main\Dir"
  SET "_DestDir=%Temp%\Destination\Main\Dir"
)

FOR /D %%A in (
  %_MainDir%\*
) DO (
  IF NOT EXIST "%_DestDir%\%%~nxA" MD "%_DestDir%\%%~nxA"
  FOR /F %%a IN ('
    DIR /A-D /S /B "%%~fA\*"
  ') DO (
    ECHO Copying: "%%~fa"
    ECHO To: "%_DestDir%\%%~nxA\%%~nxa"
    COPY /B /V /Y "%%~fa" "%_DestDir%\%%~nxA\%%~nxa"
  )
)

考虑到每个层次结构分支中的三个子目录名称相同(如
f0\f0\f0
f1\f1\f1
),这是一项非常简单的任务,与a一起使用:

rem//循环主目录的直接子目录:
对于/D%%I in(“D:\MainDir\*”)do(
rem/*将文件路径构建到第二个子目录中(尽管没有文件);
rem第三个子目录及其内容由于`/S`选项而被视为;
rem复制目标目录然后接收
rem第二个源子目录,包括第三个源子目录:*/
xcopy/S/I“%%~I\%%~nxI\*.*”D:\CopyDir
)

考虑到每个层次结构分支中的三个子目录名称相同(如
f0\f0\f0
f1\f1\f1
),这是一项与a一起使用的非常简单的任务:

rem//循环主目录的直接子目录:
对于/D%%I in(“D:\MainDir\*”)do(
rem/*将文件路径构建到第二个子目录中(尽管没有文件);
rem第三个子目录及其内容由于`/S`选项而被视为;
rem复制目标目录然后接收
rem第二个源子目录,包括第三个源子目录:*/
xcopy/S/I“%%~I\%%~nxI\*.*”D:\CopyDir
)


虽然仍包含在Windows 10中,但有人反对使用Xcopy。Robocpy可以实现我在这里试图实现的目标吗。是的,你能分享一个例子吗?分支中的子文件夹是否真的有相同的名称(
f0\f0\f0
)?是@aschipfl。这就是它们在数据源上的结构。虽然仍然包含在Windows 10中,
Xcopy
已被弃用,取而代之的是。Robocpy能否实现我在这里试图实现的目标。是的,你能分享一个例子吗?分支中的子文件夹是否真的有相同的名称(
f0\f0\f0
)?是@aschipfl。这就是它们在数据源上的结构。这将创建第一个文件夹f0,但没有复制任何文件(a.txt、b.txt…)。正如我所提到的,文件位于f0文件夹的第三级,所以基本上我试图去掉前两个冗余文件夹,并将结构的其余部分与文件一起复制。此外,还有多个类似的文件夹结构,如f0、f1等。实际上,我认为复制不应该存在,因为我看到错误,复制是一个无法识别的命令。这是一个输入错误,我修改了代码以解决该问题。@Compo感谢捕获该组件。@vsingh这是一个输入错误,Compo更正了代码,我刚刚从几行中放出了
echo
,这几行只是为了给你打印状态。这是在创建第一个文件夹f0,但是没有一个文件(a.txt,b.txt…)被复制。正如我所提到的,文件位于f0文件夹的第三级,所以基本上我试图去掉前两个冗余文件夹,并将结构的其余部分与文件一起复制。此外,还有多个类似的文件夹结构,如f0、f1等。实际上,我认为复制不应该存在,因为我看到错误,复制是一个无法识别的命令。这是一个输入错误,我修改了代码以解决该问题。@Compo感谢捕获该组件。@vsingh这是一个输入错误,Compo更正了代码,我只是从几行中放出了
echo
,只是为了给你打印出状态。我错报了要求。我又看了一眼结构。主目录有f0、f1…fn文件夹。每个文件夹都有子文件夹和文件。现在我们需要将其复制到目标位置,以便合并子文件夹中的所有文件。因此,目标目录将只有关键的第一级文件夹,如f0、f1、f2…fn。基础文件夹中的所有文件都将合并并保存在这些关键文件夹下。那么,会不会发生文件名冲突?我的意思是,第一级文件夹中的文件与子(子)目录中的文件具有相同的名称?是的,我检查过了,父级文件夹和子文件夹不会有任何重复的文件名。我发现您要求a满足更新的要求,我把答案的一部分移到了这里,因为它更适合那里……我错报了要求。我又看了一眼结构。主目录有f0、f1…fn文件夹。每个文件夹都有子文件夹和文件。现在我们需要将其复制到目标位置,以便合并子文件夹中的所有文件。因此,目标目录将只有关键的第一级文件夹,如f0、f1、f2…fn。基础文件夹中的所有文件都将合并并保存在这些关键文件夹下。那么,会不会发生文件名冲突?我的意思是,第一级文件夹中的文件与子(子)目录中的文件同名?是的,我检查过了,父级文件夹和子文件夹中不会有任何重复的文件名。我发现您要求a涵盖更新的要求,我将此答案的一部分移到了,因为它更适合那里。。。