[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 顺次生成文件名

我想打包上传一些漫画到一些漫画论坛,附件大小为2MB,我想以每35个图片文件打包成rar,打包后删除该文件,批处理为

  1. @echo off & setlocal enabledelayedexpansion
  2. set n=-1
  3. for %%a in (*.jpg) do (
  4. set /a n+=1,m=n%%35
  5. if !m! equ 0 set /a x+=1
  6. "C:\Program Files\WinRAR\WinRAR.exe" a "-cpdelete" !x!.rar "%%a"
  7. )
复制代码


其中,delete是我Win RAR中的一个压缩配置。上面这个批处理生成的文件名只是普通的1、2……,现我需要将该文件夹中的jpg文件压缩成“第x集y”这样的文件名,x从24开始递增,增量为1;y从1开始递增,增量为1.

例如,我第一次运行此批处理,批处理会将这个文件夹下面的图片文件每35个打包成rar,生成的文件名为“第24集1”、“第24集2”……。然后我会将新的图片放入该文件夹并第二次运行该批处理,该批处理生成的文件名应该是“第25集1”、“第25集2”……。

[ 本帖最后由 Wingl83 于 2008-12-6 18:56 编辑 ]
我是小菜菜……

我的 RAR 版本比较老,参数可能与你的不一样。所以 RAR 部分代码你自己改一下。
  1. @echo off
  2. for /f "tokens=1 delims=第集" %%i in ('"dir/o-n/b *.rar 2>nul"') do set/a ji=%%i&goto :outfor
  3. :outfor
  4. set/a ji+=1
  5. setlocal enabledelayedexpansion
  6. set n=-1
  7. for /f "delims=" %%a in ('dir/b *.jpg') do (
  8.  set /a n+=1,m=n%%35
  9.  if !m! equ 0 set /a x+=1
  10.  "%ProgramFiles%\WinRAR\RAR.exe" a -ep -df "第%ji%集!x!.rar" "%%a">nul
  11. )
复制代码

[ 本帖最后由 wxcute 于 2008-12-7 13:45 编辑 ]

TOP

还是会发生这样的情况:第一次运行的时候是正常的,但第二次运行时,直接会将新的图片文件添加到第一次运行时生成的rar里,而不是另外生成文件。

且我现在已经进行到第38部,现在%ji%应该是39,应该怎样改呢?

[ 本帖最后由 Wingl83 于 2008-12-7 14:13 编辑 ]
我是小菜菜……

TOP

我指的要改的代码是这句
"%ProgramFiles%\WinRAR\RAR.exe" a -ep -df "第%ji%集!x!.rar" "%%a">nul
RAR 的参数部分(红色)
a -ep -df
其他的不用改。
=====================
只要不是进位,如从 99 到 100,就没有问题。

TOP

我知道是你指这红色部分这句,代码我已修改如下:

  1. @echo off
  2. for /f "tokens=1 delims=第集" %%i in ('"dir/o-n/b *.rar 2>nul"') do set/a ji=%%i&goto :outfor
  3. :outfor
  4. set/a ji+=1
  5. setlocal enabledelayedexpansion
  6. set n=-1
  7. for /f "delims=" %%a in ('dir/b *.jpg') do (
  8.  set /a n+=1,m=n%%5
  9.  if !m! equ 0 set /a x+=1
  10.  "C:\Program Files\WinRAR\WinRAR.exe" a "-cpdelete" "名侦探柯南_第%ji%卷!x!.rar" "%%a">nul
  11. )
复制代码


但还是会发生3楼的情况。如图:



[ 本帖最后由 Wingl83 于 2008-12-7 14:34 编辑 ]
我是小菜菜……

TOP

还是把图片删除罢,我已经看明白了;主要是这个图片太大,我机子卡了。
你可以在顶楼上做相应更改,指明文件名为 “XX第m卷n.rar”(其中m为000-999)(卷和集这两个字是不一样的)
我原来的 delims=第集 中的两个汉字是用来作分隔符的,既然是你杜撰的用的时候就要改成你实际的,否则表述时你就用实际的 “第卷” 而不要杜撰个来用。(你的隐私我不爱了解,只要不是干坏事就行)
一次性表述清楚多好,这样左来右去的既浪费你的精力又浪费我的精力你说是不是!

@echo off
for /f "tokens=1 delims=第集卷" %%i in ('"dir/o-n/b *.rar 2>nul"') do set ji=1%%i&goto utfor
:outfor
set/a ji=ji-1000+1
set num=00%ji%
set num=%num:~-3%
echo %num%
pause
setlocal enabledelayedexpansion
set n=
for /f "delims=" %%a in ('dir/b *.jpg') do (
 set /a n+=1,m=n%%2
 if !m! equ 0 set /a x+=1
 "%ProgramFiles%\WinRAR\RAR.exe" a -ep -df "第%num%卷!x!.rar" "%%a">nul
)

红色部分用来显示 “卷号”,如果正确就可以删除这两行运行了。

[ 本帖最后由 wxcute 于 2008-12-7 15:35 编辑 ]

TOP

卷号仍是不对,请问是6楼的卷号是怎样确定的?我的原意是1开始递增,增量为1,可是前面1~38卷我已经手动做好了,不可以自定义吗?例如从39开始。

[ 本帖最后由 Wingl83 于 2008-12-7 16:01 编辑 ]
我是小菜菜……

TOP

卷号确定不了原因可能是我们运行的环境不同造成的。

下面改成手动输入卷号(参阅 set 命令 /p 参数 帮助)
  1. @echo off
  2. set/p num=请输入新卷号:
  3. set num=00%num%
  4. set num=%num:~-3%
  5. setlocal enabledelayedexpansion
  6. set n=-1
  7. for /f "delims=" %%a in ('dir/b *.jpg') do (
  8.  set /a n+=1,m=n%%2
  9.  if !m! equ 0 set /a x+=1
  10.  "%ProgramFiles%\WinRAR\RAR.exe" a -ep -df "第%num%卷!x!.rar" "%%a">nul
  11. )
复制代码
要完完全全用你自己的卷号就去掉第三行与第四行,因为这两行是用来自动在数字前添 0 的。

[ 本帖最后由 wxcute 于 2008-12-7 18:30 编辑 ]

TOP

返回列表