python+bat实现指定类型的全部文件按同样目录层次复制到另一分区

任务1 备份某目录下某种类型的全部文件(某目录下的全部文件夹)到指定文件夹。

使用批处理的目录循环和xcopy命令即可完成。

::假设批处理文件保存在:e:\website下,echo %~dp0会显示:E:\Website\ 
::假设批处理文件保存在:e:\website下,md %~dp0new222会建立文件夹E:\Website\new222
::也可以在后面加"\",新建文件夹和复制文件时都无错,只是在echo %~dp0\aaanew >a.txt,内容是E:\Website\\aaanew
::set path1 = %~dp0 是无效的,因为"="的右边只能是string
md %userprofile%\desktop\witiso
copy %~dp0\witiso\* %userprofile%\desktop\witiso
for /f "tokens=1,2 usebackq delims=." %%a in (`dir %~dp0\witiso /o:d /b`) do (
	if "%%a.%%b"=="%%a." (
		md %userprofile%\desktop\witiso\%%a
	)
)
for /f "tokens=1,2 usebackq delims=." %%j in (`dir %~dp0\witiso /o:d /b`) do (
	if "%%j.%%k"=="%%j." (
		copy %~dp0witiso\%%j\*.html %userprofile%\desktop\witiso\%%j
	)
)
for /f "tokens=1,2 usebackq delims=." %%j in (`dir %~dp0\witiso /o:d /b`) do (
	if "%%j"=="zfirst" (
		xcopy /s %~dp0witiso\zfirst %userprofile%\desktop\witiso\zfirst
	)
	if "%%j"=="css" (
		copy %~dp0witiso\%%j\* %userprofile%\desktop\witiso\%%j
	)
	if "%%j"=="js" (
		copy %~dp0witiso\%%j\* %userprofile%\desktop\witiso\%%j
	)
)
cd %ProgramFiles%\winrar
%systemdrive%
rar a -r %userprofile%\desktop\witiso.rar %userprofile%\desktop\witiso\*
rem python F:\Website\witiso.py
rem a表示创建压缩文档的命令;
rem -m5是指定最大压缩比率;
rem -s是采用固实压缩;
rem -r是递归压缩文件夹中所有文件;
rem 后面的待压缩的若干文件夹。
rem 如果winrar的安装目录不在环境变量PATH中,则需要写全路径,如:"C:\Program Files\WinRar\rar" ......

任务2:在目录F:\website下有多级文件夹,要实现此目录下的html、html、doc、xls文件复制到D:\website,目录层次保持不变,指定类型以外的文件不复制。

实现思路:

1 使用批处理将指定文件(包括路径)输入到一个文本文件。

2 使用python代码分析文本文件的每一行(文件路径),分别用来建立目录和实现文件复制。

批处理文件:

@echo off
setlocal enabledelayedexpansion
echo.>D:\websiteHtmlBackup\fileList.txt
color 3a
echo.
echo 系统正在查找文件,请耐心等候......
echo.

::for %%a in (C D E F) do (
for %%a in (F:\Website\Templates) do (
cd /d %%a\
	for /r %%b in (*.html *.htm) do (
		if exist "%%b" (
			echo %%b
			echo %%b>>D:\websiteHtmlBackup\fileList.txt
		)
	)
	for /r %%b in (*.doc *.xls) do (
		if exist "%%b" (
			echo %%b
			echo %%b>>D:\websiteHtmlBackup\fileList.txt
		)
	)
	for /r %%b in (*.css) do (
		if exist "%%b" (
			echo %%b
			echo %%b>>D:\websiteHtmlBackup\fileList.txt
		)
	)
)
for /r F:\website\witiso\zfirst %%b in (*) do (
	if exist "%%b" (
		echo %%b
		echo %%b>>D:\websiteHtmlBackup\fileList.txt
	)
)
for /r F:\website\witisoPC\zfirst %%b in (*) do (
	if exist "%%b" (
		echo %%b
		echo %%b>>D:\websiteHtmlBackup\fileList.txt
	)
)
type D:\websiteHtmlBackup\fileList.txt | find /i "\" && goto no
echo.
echo 文件内容没找到!
del D:\websiteHtmlBackup\fileList.txt>nul 2>nul
echo.
pause
exit
:no
::cls
echo.
echo 文件查找完毕并记录在D:\websiteHtmlBackup\fileList.txt中 !
echo 现查到%b%文件总的个数:!n!
echo.
echo 是否打开文本查看记录 ?
echo.
echo 选择" Y "查看。 选择" N "退出。
echo.
set /p Choice=Y/N: 
IF /I '%Choice:~0,1%'=='y' goto A
IF /I '%Choice:~0,1%'=='n' goto B
pause
exit
:A
start D:\websiteHtmlBackup\fileList.txt
exit
pause
:b
exit

2 python代码:

import shutil,os
f = open("fileList.txt") #文件内不能有空行,文件名中不能有半角?号
lines = f.readlines()

for line in lines:
 str = R""+line
 str1 = "\\";
 k = str.rfind(str1, len(str1))
 copytoDir = "D"+str[1:k]
 if not os.path.exists(copytoDir):
 os.makedirs(copytoDir);
 srcFile=line.splitlines()[0] #去掉后面的\n
 shutil.copy(srcFile,copytoDir)
 print (srcFile)
 
# 如果因文件名的问题而出现中断,记住中断的位置,
# 然后删除文本文件中此前的内容再继续即可。

-End-

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注