如何使用批处理在所有目录及子目录中创建指定内容的文本文件?
解决递归创建readme.txt到所有子目录的问题
先给你捋清楚为啥之前的命令不管用:for /D 只会扫描当前目录下的一级子文件夹,不会递归深入到更下层的嵌套目录,所以像 C:/movies/thumbnail/hd 这种深层目录根本覆盖不到。
下面给你两个靠谱的解决方案,都能自动处理所有层级的目录:
方案1:先准备好readme.txt再递归复制
先在当前命令行所在的目录里创建好 readme.txt(内容写 downloaded-from-xyz.com),然后用for /R命令递归遍历所有子目录并复制文件:
- 如果是直接在命令提示符里执行:
for /R C:\movies %x in (.) do copy readme.txt "%x"
- 如果是写在**批处理脚本(.bat)**里,要把变量的单百分号改成双百分号(批处理的语法要求):
for /R C:\movies %%x in (.) do copy readme.txt "%%x"
方案2:直接在每个目录生成文件(无需预先准备readme.txt)
这个更省事,不用提前创建文件,直接用echo命令在每个目标目录生成readme.txt并写入指定内容:
- 命令提示符版本:
for /R C:\movies %x in (.) do echo downloaded-from-xyz.com > "%x\readme.txt"
- 批处理脚本版本:
for /R C:\movies %%x in (.) do echo downloaded-from-xyz.com > "%%x\readme.txt"
额外提示:
for /R C:\movies的作用是从C:\movies根目录开始,递归遍历所有子目录;(.)用来匹配每个目录本身,%x(或%%x)会被替换成每个目录的完整路径。- 给路径加上引号
"%x"是为了兼容未来可能出现的带空格的目录名,避免命令报错。 - 如果遇到已存在的
readme.txt,上述命令会直接覆盖原有文件;要是不想覆盖,可以把copy命令改成copy /-y readme.txt "%x"(会提示是否覆盖),或者把>改成>>(变成追加模式,不会覆盖原有内容)。
内容的提问来源于stack exchange,提问作者Sadam
相关产品推荐
相关产品推荐

