Board logo

标题: [文件操作] [已解决]请求帮忙制作一个批量压缩的批处理脚本 [打印本页]

作者: 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的文件名可自定义。

我研究了一天,写了一个总出错的大概。
希望得到高手的帮助
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. ::设置rar路径
  4. Set rarpath="C:\Program Files\WinRAR"
  5. ::设置备份目标路径:
  6. Set backuppath="G:\mengqy\backup\web\tst"
  7. ::设置db数据库
  8. set "file=db.txt"
  9. for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
  10. ::set "%%a=%%b"
  11. echo a=%%a
  12. echo b=%%b
  13. set mulu=%a%
  14. set filename=%b%
  15. echo mulu=%mulu%
  16. echo filename=%filename%
  17. pause
复制代码

作者: DAIC    时间: 2015-1-11 19:52

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. ::设置rar路径
  4. set rarpath="C:\Program Files\WinRAR"
  5. ::设置备份目标路径:
  6. set backuppath="G:\mengqy\backup\web\tst"
  7. ::设置db数据库
  8. set "file=db.txt"
  9. for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
  10.     echo a=%%a
  11.     echo b=%%b
  12.     set mulu=!a!
  13.     set filename=!b!
  14.     echo mulu=!mulu!
  15.     echo filename=!filename!
  16. )
  17. 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

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. ::设置rar路径
  4. set rarpath="C:\Program Files\WinRAR"
  5. ::设置备份目标路径:
  6. set backuppath="G:\mengqy\backup\web\tst"
  7. ::设置db数据库
  8. set "file=db.txt"
  9. for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
  10.     set mulu=%%a
  11.     set filename=%%b
  12.     echo mulu=!mulu!
  13.     echo filename=!filename!
  14. )
  15. 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的大力帮助,我终于完成了。
  1. @echo on
  2. setlocal EnableDelayedExpansion
  3. ::设置rar路径
  4. set "rarpath=C:\Program Files\WinRAR"
  5. ::设置备份目标路径:
  6. set "backuppath=G:\mengqy\backup\web"
  7. ::设置db数据库
  8. set "file=db.txt"
  9. for /f "usebackq tokens=1* delims=#" %%a in ("%file%") do (
  10.     set mulu=%%a
  11.     set filename=%%b
  12.     ::echo mulu=!mulu!
  13.     ::echo filename=!filename!
  14.     ::echo.
  15. ::执行压缩
  16. cd /d !mulu!
  17. "%rarpath%\rar.exe" a -r -hp123456 -ag" -YYYYMMDDHHMMSS" "!filename!".rar
  18. move "!mulu!\*.rar" %backuppath%
  19. Echo %date% %time% !filename!压缩完成。>>%backuppath%\log.txt
  20. )
  21. echo %date% %time% 全部备份任务完成。>>%backuppath%\log.txt
  22. echo.
  23. open %backuppath%
复制代码
现在可以完全自动的实现db.txt文件里定义的所有目录的自动压缩备份了.
会在%backuppath%目录下找到压缩后的rar文件,密码是-hp控制的,现在是123456
如果需要压缩后删除,只需要把rar.exe后面的a参数换成m。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2