您当前位置: 首页 »

package

标签归档: package

打包修改过的文件的批处理,更新第2版

之前写过《打包修改过的文件的批处理》,现在这个批处理脚本已经过多次修改,增加了很多功能,新脚本代码如下:

@echo off
:: 网站更新文件打包程序
:: 作者: Mr.Lodar http://lodar.net/

:: 版本历史:
::
:: v2.4  2011年01月11日  随机临时目录
::                       防止多个批处理同时运行时产生冲突
:: v2.3  2011年01月11日  自动配置7-Zip安装目录
::                       自动检测7-Zip的安装目录,不需要再手工配置路径
:: v2.2  2010年12月03日  增加PATH环境变量设置
::                       在系统环境变量未加入7-Zip时不用复制程序文件到当前目录
:: v2.1  2010年11月16日  增加批打包支持 - 多个目录同时拖放并分别打包
::                       增加判断有修改的文件时才打包,不再生成空压缩包
:: v2.0  2010年11月16日  新增拖放打包支持 - 将目录拖放到脚本文件上自动打包
::                       (为了支持快速批打包,拖放模式只默认打包当天修改的文件)
:: v1.0  2010年06月某日  初始版本,实现了文件排除及默认值设置

:: 拖放到图标上执行的时候程序启动路径为用户目录
:: 如: "C:\Documents and Settings\User"
:: 这里把当前目录设置回批处理脚本所在目录
cd /d %~dp0

:: 检索7-Zip安装目录
for /f "tokens=2*" %%i in (
	'REG QUERY "HKLM\SOFTWARE\7-Zip" ^| find /i "Path"'
) do set "SevenZipPath=%%j"

:: 设置7-Zzip路径
SET PATH=%PATH%;%SevenZipPath%

:START
:: 设置临时目录:
set TEMP=temp_%random%

if not @%1@==@@ (
	set FROM=%~n1
) else (
	set /P FROM=源文件目录^(默认为www^):
	set /P TO=导出压缩包文件名^(默认为%FROM%-update-%date:~0,4%%date:~5,2%%date:~8,2%^):
	set /P DAY=修改时间^(m-d-y,默认为今天{%date:~5,5%-%date:~0,4%}^):
)

:: 设置变量默认值
if @%FROM%@==@@ set FROM=www
if @%TO%@==@@ set TO=%FROM%-update-%date:~0,4%%date:~5,2%%date:~8,2%
if @%DAY%@==@@ set DAY=%date:~5,5%-%date:~0,4%

:: 将要打包的文件复制到临时文件夹,将排除文件列表(excludelist.txt)中的文件排除在外
xcopy %FROM% %TEMP% /S /Y /I /D:%DAY% /EXCLUDE:excludelist.txt

IF EXIST %TEMP% (
	:: 使用7z命令行程序进行打包
	7z a -t7z %TO%.7z .\%TEMP%\*

	:: 删除临时文件
	rmdir /S /Q %TEMP%

	echo 文件已打包到 %TO%.7z
) else (
	echo %~n1 中没有需要打包的文件
)

:: 重置变量,防止默认值被设置为上次使用的值
set FROM=
set TO=
set DAY=
set TEMP=

:: 如果有更多目录要打包,则继续重新打包其它目录
if not @%2@==@@ shift && goto START

echo.

if @%1@==@@ (
	echo 打完收工! 按任意键退出...
	pause>nul
) else (
	echo 打完收工! 一会就退出...
	ping 127.0.0.1 -n 3 >nul
)

提示: 不要忘了 excludelist.txt 哦,参见之前的那篇文章《打包修改过的文件的批处理》。

打包修改过的文件的批处理

在没有进行版本管理的项目中,常常会因为忘记修改过哪些文件而把整个项目都覆盖一遍,既浪费网络带宽又浪费时间,每次覆盖都要在FTP上传好久,于是我就写了一个批处理脚本,将修改过的需要覆盖的文件打包成一个压缩包,代码如下:

@echo off
:: 网站更新文件打包程序

:: 设置临时目录:
set TEMP=temp

set /P FROM=源文件目录^(默认为www^):
if @%FROM%@==@@ set FROM=www

set /P TO=导出压缩包文件名^(默认为update-%date:~0,4%%date:~5,2%%date:~8,2%^):
if @%TO%@==@@ set TO=update-%date:~0,4%%date:~5,2%%date:~8,2%

set /P DAY=修改时间^(m-d-y,默认为今天{%date:~5,5%-%date:~0,4%}^):
if @%DAY%@==@@ set DAY=%date:~5,5%-%date:~0,4%

:: 将要打包的文件复制到临时文件夹,将排除文件列表(excludelist.txt)中的文件排除在外
xcopy %FROM% %temp% /S /Y /I /D:%DAY% /EXCLUDE:excludelist.txt

:: 使用7z命令行程序进行打包
7z a -t7z %TO%.7z .\%temp%\*

:: 删除临时文件
rmdir /S /Q %temp%

echo 文件已打包到 %TO%.7z
pause>nul

该批处理使用了7-zip的命令行压缩工具来打包,将7z.exe复制到当前目录即可
excludelist.txt 中包含了需要排除的文件列表,xcopy的帮助中是这样说明的:

指定含有字符串的文件列表。每一个字符串必须在文件的单独行中。如果有任何字符串与要被复制的文件的绝对路径相符,那个文件将不会得到复制。
例如,指定如 \obj\ 或 .obj 的字符串会排除目录 obj 下面的所有文件或带有 .obj 扩展名的文件。