从DOS命令我想移动所有与文件名模式不匹配的文件。 像这样:
例如,我想移动所有不以“aaa”开头的文件
for %i in (*) do if not %i == aaa* move %i .\..
答案 0 :(得分:13)
XCOPY 旨在使用'排除'列表...见下文:
dir /b /a-d "source"|findstr /b "aaa" >"%temp%\aaafiles.tmp"
xcopy "source" "destination\" /exclude:%temp%\aaafiles.tmp /y
第一行执行 source 文件夹的 DIR (目录)列表,列出裸格式文件( / b ),忽略目录名称( / ad )。输出通过管道输入 FINDSTR 命令。
FINDSTR 查看每个文件名,并将其开头( / b )与字符串“ aaa ”进行比较。
如果文件名的开头与字符串“ aaa ”匹配,则文件名将重定向(写入)到用户 TEMP中的文件 aaafiles.tmp 目录。
/ b 至关重要,因为您不想排除 theaaafile.txt 等文件。
XCOPY 命令将文件从源文件夹复制到目标文件夹,但 aaafiles.tmp <中列出的文件除外/ em>的
提示覆盖现有文件( / y )已关闭。
source 和 destination 将需要替换您自己的foldernames。
答案 1 :(得分:4)
您可以这样做的一种方法是创建要在临时文件中移动的文件列表。然后使用for
命令使用该文件。使用findstr
生成列表。
> dir/b/a-d | findstr /v aaa* > "%temp%\@movelist"
> for /f %f in (%temp%\@movelist) do move %f ...
第一个命令获取当前目录中所有文件(没有目录)的列表,然后将列表传递给findstr
,排除(/v
)与模式匹配的文件名并将其放入临时目录中的文件@movelist
。第二个命令只是取得那些结果,所以你可以用它们做你想做的事情(移动它)。
在没有临时文件的单个命令中可能有更好的方法,我只是不知道如何编写它。我不确定如何从dir
命令中调用for
命令。 AFAIK它只接受存在的程序文件,而不是内置命令。
答案 2 :(得分:4)
如果您不介意摆弄存档位,可以使用它根据文件掩码选择性地复制和删除文件。
移动(复制和删除)除当前目录中以“aaa”开头的所有文件到“dest”。也可以指定完整的源路径。
attrib +a *.*
attrib -a aaa*.*
xcopy /a [or /m] *.* dest
del /aa /q *.*
答案 3 :(得分:4)
Robocopy是一种可能性
robocopy source destination *.* /mov /XF aaa*.*
选项请参阅此处http://technet.microsoft.com/en-us/library/cc733145.aspx
答案 4 :(得分:2)
在某些情况下,它可以变得更简单。例如,我必须递归复制一堆目录但排除所有图像(png和bmp文件),所以我只创建了一个excludeList.txt
文件,其中包含:
.png
.bmp
并运行
xcopy /S /I <source> <dest> /exclude:c:\excludeList.txt
它将匹配任何文件或目录包含 .png
,但不一定结束 .png
。 (我没有调查是否可以巧妙地使用通配符或正则表达式)。
它没有处理你的特定例子(你已经得到了一个很好的答案),但它解决了我的问题,这个页面是我搜索解决方案时搜索到的:)
答案 5 :(得分:1)
不太理想,但是将所有文件移动到目标位置并将文件移动回源是使用实际移动操作(无副本)的快速方法。当然,这是假定目标中没有与通配符匹配的文件。
move source\*.* destination\ && move destination\aaa*.* source\