帮忙写个批处理遍历当前目录所有文件及子文件夹复制文件
本帖最后由 磊磊映画 于 2018-7-26 11:18 编辑自己写了一个批处理,只能处理当前文件夹下的文件,不能处理子文件夹的文件,每个文件都要重新执行一次很麻烦,大神帮忙写一下,我只要执行一次就能把当前目录及子文件夹的文件都复制了。
我只需要将 .a格式的文件 复制成.a_格式的文件即可 。 也就是说将所有.a的文件复制成.a_的文件
下面是我自己写的,大神只要加上遍历即可了。谢谢!
@echo off
for /r %%i in (*) do (copy*.a *.a_)
for /r %%i in (*) do (copy*.b *.b_)
for /r %%i in (*) do (copy*.j *.j_)
总结一下: 1.2Lpython的 方法和 8L脚本的方法都能解决我的问题,实现功能,都可以把所有文件子文件复制一遍,同时修改后缀
2.区别是 批处理 复制完的文件的日期和源文件是一样的,python复制的文件的日期是复制时的当前时间 ,不是以前的时间。 批处理估计是底层操作,系统干预不了。 本帖最后由 security 于 2018-7-27 11:43 编辑
我一直认为批处理不适合写复杂的应用,
也许你这个功能不算复杂吧,不过,我不会,也懒得去学。
人生苦短,我用 Python 2.7(需要安装 Python 2.7),帮你写一个相同的功能吧(把 *.a 复制为 *.a_):
copy_files.py:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from shutil import *
import sys
import os
def main(argv):
print("")
# Collect arguments
if len(sys.argv) != 2:
print("usage: copy_files.py <root_dir>")
sys.exit(2)
root_dir = argv
# Translate
for parent, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
old_full_filename = os.path.join(parent, filename)
old_full_filename_splittext = os.path.splitext(old_full_filename)
if old_full_filename_splittext == ".a":
copyfile(old_full_filename, old_full_filename_splittext + ".a_")
if __name__ == "__main__":
main(sys.argv)
对应写一个批处理,放在想要工作的文件夹目录内,双击此批处理,就会对此文件内的所有文件执行操作。
copy_files.bat:@echo off
cd /d %~dp0
python copy_files.py "%cd%"
pause
@echo on
源码包见: 感谢 1L 完美解决了我的问题,正好我的电脑上安装了 PYTHON3.6 下载下来就直接用了,效果很好
我这个需求感觉不复杂 批处理 应该一句话的事,可惜我不会自己搞了半天也没出来。
再次感谢! 有一个XCOPY命令,是DOS和WINDOWS CMD下的,和COPY一样,但功能多一点。
可以用: COPY SRC DES /S, 即可拷贝该目录与该目录下的所有子目录。
可以用XCOPY/?得到该命令的所有参数 本帖最后由 磊磊映画 于 2018-7-26 10:31 编辑
如果文件有.b .c 格式的文件也要处理的话该如何加呢?
我加了一下 ,但是执行的时候报错了 。#! /usr/bin/env python
# -*- coding: utf-8 -*-
from shutil import *
import sys
import os
def main(argv):
print("")
# Collect arguments
if len(sys.argv) != 2:
print("usage: copy_files.py <root_dir>")
sys.exit(2)
root_dir = argv
# Translate all opened cache files's format to bin
for parent, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
old_full_filename = os.path.join(parent, filename)
old_full_filename_splittext = os.path.splitext(old_full_filename)
if old_full_filename_splittext == ".a":
copyfile(old_full_filename, old_full_filename_splittext + ".a_")
else if old_full_filename_splittext == ".b":
copyfile(old_full_filename, old_full_filename_splittext + ".b_")
else if old_full_filename_splittext == ".j":
copyfile(old_full_filename, old_full_filename_splittext + ".j_")
if __name__ == "__main__":
main(sys.argv) cocom 发表于 2018-7-26 10:30
有一个XCOPY命令,是DOS和WINDOWS CMD下的,和COPY一样,但功能多一点。
可以用: COPY SRC DES /S, 即 ...
只拷贝指定格式的文件呢 如何加 磊磊映画 发表于 2018-7-26 10:30
如果文件有.b .c 格式的文件也要处理的话该如何加呢?
我加了一下 ,但是执行的时候报错了 。 ...
你的逻辑应该是对的。
你检查一下,你的 TAB 键吧,把 TAB 键转换为 4 个 space。
我给你的源码,缩进用的都是 space。
Python 非常变态,TAB 和 space 不能混用,缩进要吗全是 TAB,要吗全是 space。 批处理来了,就是这样:@echo off
for /D /R . %%i in (*, .) do (copy "%%i\*.a" "%%i\*.a_")
for /D /R . %%i in (*, .) do (copy "%%i\*.b" "%%i\*.b_")
for /D /R . %%i in (*, .) do (copy "%%i\*.c" "%%i\*.c_")
takashiki 发表于 2018-7-26 10:41
批处理来了,就是这样:
好棒好棒!学习一下。 磊磊映画 发表于 2018-7-26 10:30
如果文件有.b .c 格式的文件也要处理的话该如何加呢?
我加了一下 ,但是执行的时候报错了 。 ...
给你对应的源码比对一下,要注意缩进对齐、以及 TAB 和 space 不能混用。
coye_files.py:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from shutil import *
import sys
import os
def main(argv):
print("")
# Collect arguments
if len(sys.argv) != 2:
print("usage: copy_files.py <root_dir>")
sys.exit(2)
root_dir = argv
# Translate
for parent, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
old_full_filename = os.path.join(parent, filename)
old_full_filename_splittext = os.path.splitext(old_full_filename)
if old_full_filename_splittext == ".a":
copyfile(old_full_filename, old_full_filename_splittext + ".a_")
if old_full_filename_splittext == ".b":
copyfile(old_full_filename, old_full_filename_splittext + ".b_")
if old_full_filename_splittext == ".c":
copyfile(old_full_filename, old_full_filename_splittext + ".c_")
if __name__ == "__main__":
main(sys.argv)
源码:
本帖最后由 磊磊映画 于 2018-7-26 11:22 编辑
takashiki 发表于 2018-7-26 10:41
批处理来了,就是这样:
膜拜大神感谢完美解决了我的问题! 一句话的事:
for /r %%f in (*.a) do copy %%f %%f_ Nuker 发表于 2018-7-26 11:38
一句话的事:
for /r %%f in (*.a) do copy %%f %%f_
感谢感谢 批处理很强大,楼主也是大神 坛里牛人就是多 Nuker 发表于 2018-7-26 11:38
一句话的事:
for /r %%f in (*.a) do copy %%f %%f_
标记一下,
看来,有空也得花点时间看看批处理了。
不过现在我写批处理是越来越少了,更多用 Python 来做。 security 发表于 2018-7-26 11:53
标记一下,
看来,有空也得花点时间看看批处理了。
不过现在我写批处理是越来越少了,更多用 Python 来做 ...
像你开头说的 批处理只适合干的简单的事
页:
[1]