如何将目录复制到名称使用通配符星号匹配的目标目录中?
解决Windows命令行中
copy与通配符目录匹配的问题 我来帮你梳理下这个问题的根因和可行的解决办法:
为什么cd *foo能正常工作但copy命令报错?
Windows命令行里,cd命令对通配符的处理很直接——它会自动把*foo解析为当前目录下第一个匹配的目录名(比如你提到的1234foo),相当于帮你完成了通配符到实际目录的替换。但copy命令的逻辑不一样:它不会自动解析目标路径里的通配符,而是把*foo\bar\*当作一个字面路径去查找,自然找不到对应的文件或目录,所以才会返回找不到文件的错误。
正确的实现方式
要把bar目录复制到所有匹配*foo的目录中,你可以用for /d命令遍历匹配的目录,再逐个执行复制操作:
直接在命令行执行的命令
for /d %d in (*foo) do xcopy bar "%d\bar\" /E /I
如果是在批处理脚本里使用,变量名需要加两个百分号:
for /d %%d in (*foo) do xcopy bar "%%d\bar\" /E /I
参数说明
/d:限定只遍历目录(不会处理文件)/E:复制目录及所有子目录,包括空目录/I:如果目标的bar子目录不存在,自动创建它(避免因目录缺失报错)
如果只需要复制bar目录下的文件,不需要子目录的话,也可以用copy命令:
for /d %d in (*foo) do copy bar\* "%d\bar\"
这样就能精准地把bar的内容复制到每个匹配*foo的目录的bar子目录里了。
内容的提问来源于stack exchange,提问作者Tomurisk
相关产品推荐
相关产品推荐

