任务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-