我有一个相当广泛的目录结构:
c:\foo
\foo\1
\foo\1\doc1
\foo\1\doc2
\foo\2
\foo\2\doc1
\foo\2\doc2
...
\foo\10\docX
我想将所有带有 .txt 扩展名的文件移动(而不仅仅是复制)到另一个目录c:\textfiles
。
我想通过命令行(常规命令行,而不是 Powershell)来执行此操作,可能在批处理文件中。
我尝试过该move
命令,但它似乎只对当前目录中的文件有效。我也尝试过xcopy
,但它在复制完成后不会删除源上的文件。
答案1
从:如何使用 CMD 将所有子目录中具有特定扩展名的所有文件移动到其父目录?
此命令将使用 Windows 7 中的 cmd 将所有 pdf 文件从源目录递归复制到目标目录 - 经过测试且有效
对于 /r "c:\source_directory\" %%x 在 (*.pdf) 中移动 "%%x" "c:\target_directory\"
也可以看看:
答案2
同步
rsync
是一个可用的工具窗户也一样,通常用于远程同步目录...但它在本地目录上也能正常工作...如其自身描述中所述
一种快速、多功能、远程(和当地) 文件复制工具
由此回答在 unix.stackexchange 上...
rsync -a --prune-empty-dirs --include '*/' --include '*.txt' --exclude '*' source/ target/
笔记存在一个选项可以从源中删除文件,您可以在命令行中包含该选项,我认为您搜索的是--remove-source-files
,但是仔细检查。另一个你可能觉得有用的选项是-n
-n, --dry-run perform a trial run with no changes made --remove-source-files sender removes synchronized files (non-dir)
寻找
find
是您可以在bash
Windows 下的 shell 中找到的另一个工具,也是已编译的可执行文件(gnu查找工具)... 以下行在 Linux 下有效,但您可以修改该cp
语句以符合您的系统规范。从另一个回答...
find . -name '*.txt' -exec cp --parents \{\} /target \;
Windows 等效于find
来自另一个问题/答案对于批处理脚本,您可以使用这个提示...
dir <drive: [drive:]> /s | findstr /i <pattern>
...当然,如果他们觉得有必要力量壳牌公司有理由预期那环境应该有更简单的方法来做到这一点......
但也许下面的一个对于您的脚本来说是一个足够简单的起点:
dir c:\foo /s *.txt