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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Search_Command_Move_Subdirectory - Fatal编程技术网

Batch file 在目录/子目录中查找任何文件并复制到新目录

Batch file 在目录/子目录中查找任何文件并复制到新目录,batch-file,search,command,move,subdirectory,Batch File,Search,Command,Move,Subdirectory,我有一个包含许多文件夹的目录,每个文件夹都包含子文件夹。我想运行一个批处理,搜索这些文件夹中是否存在名为“failed”的特定子文件夹。如果此子文件夹中存在文件,我希望它随后将该文件移动到另一个已定义的文件夹 我试图查找“if-exist”命令的用法,但似乎找不到任何直接适合我需要的命令 要移动的文件的名称和类型是随机的,这就是为什么我认为“如果存在”是最有用的 有什么建议吗?阅读的帮助,注意/r和/d选项,然后在命令行中尝试这一行 for /d /r %a in (failed) do @ec

我有一个包含许多文件夹的目录,每个文件夹都包含子文件夹。我想运行一个批处理,搜索这些文件夹中是否存在名为“failed”的特定子文件夹。如果此子文件夹中存在文件,我希望它随后将该文件移动到另一个已定义的文件夹

我试图查找“if-exist”命令的用法,但似乎找不到任何直接适合我需要的命令

要移动的文件的名称和类型是随机的,这就是为什么我认为“如果存在”是最有用的


有什么建议吗?

阅读
的帮助,注意
/r
/d
选项,然后在命令行中尝试这一行

for /d /r %a in (failed) do @echo %a
您将看到此循环在所有目录结构上迭代,并将
失败
附加到目录名

然后添加对目录实际存在性的检查

if exist %a\nul @echo %a
for %b in (%a\*) do @echo %b
然后添加第二个循环以迭代找到的
failed
目录的所有内容

if exist %a\nul @echo %a
for %b in (%a\*) do @echo %b
然后用所需的
move
命令替换
echo

move %b %destination%\%~nxb
就这样,用一句简单的话

for /d /r %a in (failed) do @if exist %a\nul @for %b in (%a\*) do @move %b %destination%\%~nxb
或者,将其翻译成bat文件,并对其添加一些香料

pushd %sourceroot%
for /d /r %%a in (failed) do (
  if exist %%a\nul (
    for %%b in (%%a\*) do (
      move %%b %destination%\%%~nxb
    )
  )
)
popd

您必须找到重命名目标文件的方法,以避免名称冲突。

谢谢您的建议@PA我的目录结构如下C:\FolderOne-Folder50W>备份失败。因此,一到五十个文件夹中的每个文件夹都有两个子目录,分别称为“备份”和“失败”。我只需要针对那些“失败”的子目录,并将其中存在的任何文件移动到另一个定义的位置。当我尝试你的建议时,提示返回“无效语法”有什么想法吗?