我有像这样的文件夹结构。
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=%%A
folder
set firstFourChars=!folder:~0,4!
firstFourChars
if NOT "!firstFourChars!" == "http" (robocopy "C:/MyFolder/%%A" "D:/MyFolder/%%A" /MIR /XJ /NDL /NP /TEE /S)
robocopy
http
答案3
似乎重复了Robocopy 使用通配符排除目录但我无法关闭。无论如何你都想看看重复的内容,特别是这个答案:https://superuser.com/a/1671577/705502