标题: [文件操作] [已解决]请求帮忙制作一个批量压缩的批处理脚本 [打印本页]
作者: mengqy 时间: 2015-1-11 18:57 标题: [已解决]请求帮忙制作一个批量压缩的批处理脚本
本帖最后由 mengqy 于 2015-1-13 23:04 编辑
各位高手大家好,
我想用批处理文件实现以下功能:
有若干个文件夹,比如说D:\1\11;D:\1\12;D:\1\13;D:\1\14………………
我想通过调用rar程序自动压缩每个文件夹里的内容
db.txt文件里存N行数,中间用#分割,#前是路径,#后是文件名。(文件名里包含'-')
bat和db.txt不在D:\1下,可能在任何一个地方。
RAR路径可自定义
备份目标文件可自定义
db.txt的文件名可自定义。
我研究了一天,写了一个总出错的大概。
希望得到高手的帮助- @echo off
- setlocal EnableDelayedExpansion
- ::设置rar路径
- Set rarpath="C:\Program Files\WinRAR"
- ::设置备份目标路径:
- Set backuppath="G:\mengqy\backup\web\tst"
- ::设置db数据库
- set "file=db.txt"
- for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
- ::set "%%a=%%b"
- echo a=%%a
- echo b=%%b
- set mulu=%a%
- set filename=%b%
- echo mulu=%mulu%
- echo filename=%filename%
- pause
复制代码
作者: DAIC 时间: 2015-1-11 19:52
- @echo off
- setlocal EnableDelayedExpansion
- ::设置rar路径
- set rarpath="C:\Program Files\WinRAR"
- ::设置备份目标路径:
- set backuppath="G:\mengqy\backup\web\tst"
- ::设置db数据库
- set "file=db.txt"
- for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
- echo a=%%a
- echo b=%%b
- set mulu=!a!
- set filename=!b!
- echo mulu=!mulu!
- echo filename=!filename!
- )
- pause
复制代码
你再试试
作者: mengqy 时间: 2015-1-12 11:22
回复 2# DAIC
这里果然有大神,非常感谢。
我是个初学者,晚上回家就去试试。谢谢
作者: mengqy 时间: 2015-1-12 19:01
回复 2# DAIC
您好大神,如图所示,还是不行。
作者: DAIC 时间: 2015-1-12 22:01
回复 4# mengqy
把 @echo off 删掉,把执行过程发出来我看看。不需要截图,就复制CMD窗口里面的内容就行了。
作者: mengqy 时间: 2015-1-13 10:13
本帖最后由 mengqy 于 2015-1-13 10:14 编辑
回复 5# DAIC
D:\360data\重要数据\桌面>setlocal EnableDelayedExpansion
D:\360data\重要数据\桌面>set rarpath="C:\Program Files\WinRAR"
D:\360data\重要数据\桌面>set backuppath="G:\mengqy\backup\web\tst"
D:\360data\重要数据\桌面>set "file=db.txt"
D:\360data\重要数据\桌面>for /F "usebackq tokens=1* delims=#" %a in ("db.txt") d
o (
echo a=%a
echo b=%b
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
D:\360data\重要数据\桌面>(
echo a=D:\b.imoke.org
echo b=b.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\b.imoke.org
b=b.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>(
echo a=D:\p.imoke.org
echo b=p.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\p.imoke.org
b=p.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>(
echo a=D:\bbs.imoke.org
echo b=bbs.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\bbs.imoke.org
b=bbs.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>(
echo a=D:\mask.imoke.org
echo b=mask.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\mask.imoke.org
b=mask.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>(
echo a=D:\b.imoke.org
echo b=b.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\b.imoke.org
b=b.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>(
echo a=D:\b.imoke.org
echo b=b.imoke.org
set mulu=!a!
set filename=!b!
echo mulu=!mulu!
echo filename=!filename!
)
a=D:\b.imoke.org
b=b.imoke.org
mulu=
filename=
D:\360data\重要数据\桌面>pause
请按任意键继续. . .
非常感谢您的耐心指导
作者: DAIC 时间: 2015-1-13 10:27
- @echo off
- setlocal EnableDelayedExpansion
- ::设置rar路径
- set rarpath="C:\Program Files\WinRAR"
- ::设置备份目标路径:
- set backuppath="G:\mengqy\backup\web\tst"
- ::设置db数据库
- set "file=db.txt"
- for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
- set mulu=%%a
- set filename=%%b
- echo mulu=!mulu!
- echo filename=!filename!
- )
- pause
复制代码
作者: mengqy 时间: 2015-1-13 22:18
回复 7# DAIC
@echo on
setlocal EnableDelayedExpansion
::设置rar路径
set "rarpath=C:\Program Files\WinRAR"
::设置备份目标路径:
set "backuppath=G:\mengqy\backup\web"
::设置db数据库
set "file=db.txt"
for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
set mulu=%%a
set filename=%%b
echo mulu=!mulu!
echo filename=!filename!
echo.
pause
"%rarpath%\rar.exe" a -r -ag" -YYYYMMDDHHMMSS" "!filename!".rar "!mulu!“
pause
move "!filename!".rar %backuppath%::这里根本就没用
pause
)
pause
你好,我现在写成这个样子了,但是这样有几个问题:
第一,rar的压缩包不是存在我希望它存在的%backuppath%里,而是跟我的bat文件存放在同一目录下;
第二,产生的rar打开以后是从根目录开始压缩的。而我希望它打开后就是文件内容。
举个例子说,现在的rar打开以后只有一个mengqy文件夹,进入后有1个backup文件夹,再点开有1个web文件夹,再打开有我定义的!filename!文件夹,再打开才是我的文件,而我希望打开就是我的文件。
这个问题我测试过,发现是我这里写的有问题”"%rarpath%\rar.exe" a -r -ag" -YYYYMMDDHHMMSS" "!filename!".rar "!mulu!“",但是不加这个就压缩我bat文件所在的文件夹,而不是压缩我要的目标文件夹。
我尝试过在bat里加入cd命令,尝试进入到目标文件夹下,但是根本不起作用。
拜托您了。
作者: mengqy 时间: 2015-1-13 23:03
感谢@DAIC的大力帮助,我终于完成了。- @echo on
- setlocal EnableDelayedExpansion
- ::设置rar路径
- set "rarpath=C:\Program Files\WinRAR"
- ::设置备份目标路径:
- set "backuppath=G:\mengqy\backup\web"
- ::设置db数据库
- set "file=db.txt"
- for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
- set mulu=%%a
- set filename=%%b
- ::echo mulu=!mulu!
- ::echo filename=!filename!
- ::echo.
- ::执行压缩
- cd /d !mulu!
- "%rarpath%\rar.exe" a -r -hp123456 -ag" -YYYYMMDDHHMMSS" "!filename!".rar
- move "!mulu!\*.rar" %backuppath%
- Echo %date% %time% !filename!压缩完成。>>%backuppath%\log.txt
- )
- echo %date% %time% 全部备份任务完成。>>%backuppath%\log.txt
- echo.
- open %backuppath%
复制代码
现在可以完全自动的实现db.txt文件里定义的所有目录的自动压缩备份了.
会在%backuppath%目录下找到压缩后的rar文件,密码是-hp控制的,现在是123456
如果需要压缩后删除,只需要把rar.exe后面的a参数换成m。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |