Robocopy 通过通配符排除文件夹

Robocopy 通过通配符排除文件夹

我有像这样的文件夹结构。

C:\MyFolder\http+++one\
C:\MyFolder\http+++two\
C:\MyFolder\http+++three\
C:\MyFolder\Other+++One\
C:\MyFolder\Other+++Two\
C:\MyFolder\Other+++Three\

仅需要复制以 开头的文件夹Other+++,不要复制以 开头的文件夹http+++

http+++现在的问题是带有其他和前缀的文件夹数量other+++是动态的,它每天都在增长,所以我无法通过手动指定每个文件夹来排除它们,必须使用通配符。

需要与此类似的有效解决方案:

robocopy "C:\MyFolder" "D:\MyFolder" /MIR /XJ /NDL /NP /TEE /S /XD "C:\MyFolder\http*"

显然上述命令不起作用。

答案1

由于 robocopy 在路径字符串的任何位置搜索通配符,因此排除这些文件夹的简单语法是:

/XD http*

答案2

鉴于您使用的是 robocopy(一种仅适用于 Windows 的实用程序),我假设您可以运行批处理脚本。
以下脚本将执行您要查找的操作,并且不需要从任何相关文件夹运行它,以防您无法写入它们。

@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%A in ('dir /a:d /b "C:/MyFolder"') do ( 
    set folder=%%A
    set firstFourChars=!folder:~0,4!
    if NOT "!firstFourChars!" == "http" (robocopy "C:/MyFolder/%%A" "D:/MyFolder/%%A" /MIR /XJ /NDL /NP /TEE /S)
)

解释:

@echo off整理输出,阻止解释器说出它运行的每个命令。通过逐个执行
setlocal enableextensions enabledelayedexpansion包含在其中的指令,并允许使用语法访问变量的当前状态,使 for 循环正常工作。循环遍历中的所有文件夹。需要支持带空格的文件夹名称。将每个文件夹的名称设置为名为的变量。将每个文件夹名称的前四个字符设置为名为的变量。仅当所述前四个字符与文字不匹配时才运行命令。(...)!var!
for /f "delims=" %%A in ('dir /a:d /b "C:/MyFolder"') do (...)C:/MyFolder"delims="
set folder=%%Afolder
set firstFourChars=!folder:~0,4!firstFourChars
if NOT "!firstFourChars!" == "http" (robocopy "C:/MyFolder/%%A" "D:/MyFolder/%%A" /MIR /XJ /NDL /NP /TEE /S)robocopyhttp

答案3

似乎重复了Robocopy 使用通配符排除目录但我无法关闭。无论如何你都想看看重复的内容,特别是这个答案:https://superuser.com/a/1671577/705502

相关内容