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

[文本处理] 求修改这两个批处理代码!

不太懂批处理,请行家帮助修改!不要见笑,谢谢了!
●1、扫描《bbbbb》文件夹里的指定文件
@echo off
set /a n=100000
cd.>aaaaa.txt
for /f "delims=" %%i in ('dir bbbbb\*.txt bbbbb\*.doc bbbbb\*.pdf /b') do (
  set "var=%%i"
  setlocal enabledelayedexpansion
  set var=!var:*:=!
  set /a n+=1
  echo "&!n:~-1!=!var!&">>aaaaa.txt
  endlocal
)
▲现在aaaaa.txt是这样的:
"&1=***.txt&"
"&1=***.doc&"
"&1=***.txt&"
"&1=***.pdf&"
"&1=***.txt&"
等等……

〓而我要的效果是:
1、不要出现上面的""引号。
2、每个文件名头尾保留& &间隔符号。
3、给每个文件名排个序号加等号:1=、2=、3=……99999=(是单数1开始往下排,不是00001往下排。上面的变量n,没起变化作用)。
4、要按windows递增方式排列原有文件名,就是不要打乱《bbbbb》文件夹里原来的排序。
   原来排在第一个的,在aaaaa.txt里还放在第一个,第二个的放在第二个……(上面的代码做不到)。
5、要支持读取长文件名和特殊符号文件名。

最后aaaaa.txt里要这样排列:
&1=***.txt&
&2=***.doc&
&3=***.pdf&
依次往下为:
&10=***.pdf&
&100=***.txt&
&1000=***.doc&
&10000=***.txt&
&99999=***.txt&
等等……

●2、批量修改《bbbbb》文件夹里多种格式的文件
跟上面没关系,是两种功能要求,请不要混在一起。
@echo off&set /a n=100000
for /f "delims=" %%a in ('dir bbbbb\*.txt bbbbb\*.doc bbbbb\*.pdf /b') do (
  setlocal enabledelayedexpansion
  set /a n+=1
  ren "%%a" "my_!n:~1!.txt"
  endlocal
)
▲现在只能同时修改一种文件。
这里不知道该怎么处理了:ren "%%a" "aaaaa_!n:~1!.txt"

〓我要的效果是:
1、同时修改多种文件名。
2、按00001--99999五位数递增排列。
3、不要打乱《bbbbb》文件夹里原来的排序,原来在第一个的就把它改成00001,第二个改成00002……(上面的代码做不到)。

改名后是这样的:
my_00001.txt
my_00002.doc
my_00003.pdf
依次往下为:
my_00010.txt
my_00100.doc
my_01000.pdf
my_10000.txt
my_99999.doc
等等……

真诚感谢!!

分成两个帖子吧,否则很容易搞乱。

TOP

分成两个帖子吧,否则很容易搞乱。
forfiles 发表于 2012-7-4 15:15


   谢谢提醒!
  其实两个有异曲同工之妙,修改了一个就能修改第二个了。
  请帮忙者标上1、2序号。

  哎,哪位大侠来帮帮忙啊。
  其实很简单,我这个外行都基本上实现了。
  内行一看几分钟就搞定!
  大侠快出手吧!

TOP

不知道你的文件windows下是以什么方式排序的(名称、大小、类型、日期),假设按名称以递增方式排序:
1.
  1. @echo off
  2. pushd "bbbbb\"
  3. (for /f "delims=" %%i in ('dir /a-d /on /b *.txt *.doc *.pdf') do (
  4.   set "var=%%i"
  5.   set /a n+=1
  6.   setlocal enabledelayedexpansion
  7.   echo ^&!n!=!var!^&
  8.   endlocal
  9. ))>"%~dp0aaaaa.txt"
复制代码
2.
  1. @echo off&set n=100000
  2. pushd "bbbbb\"
  3. for /f "delims=" %%a in ('dir /a-d /on /b *.txt *.doc *.pdf') do (
  4.   set "name=%%a"
  5.   set/a n+=1
  6.   setlocal enabledelayedexpansion
  7.   echo ren "!name!" "my_!n:~1!%%~xa"
  8.   endlocal
  9. )
复制代码

TOP

不知道你的文件windows下是以什么方式排序的(名称、大小、类型、日期),假设按名称以递增方式排序:
1.2 ...
apang 发表于 2012-7-4 18:12


不是一个“谢”字能表示我的心情的!千恩万谢吧!
谢谢您,好心人!

第一个代码中现在还有一点小问题:
windows下是按名称、数值大小递增方式排序的,比如:
1.txt
2.txt
3.txt
10.txt
19.txt
20..txt
29..txt
30..txt
39.txt
等等......

而扫描得到的结果排列是:
先排列1打头:
1.txt
10.txt
19.txt
再排列2打头、3打头:
2.txt
20..txt
29..txt
3.txt
30..txt
39.txt
能不能再帮帮忙,限定扫描结果按windows的原始排列方式?
再次谢谢!!

TOP

回复 5# ppccll

这个。。。偶不会。。。
你可以试试将windows中的排序方式改为"按修改日期",再将代码中的/on改成/od;
或将windows中的排序方式改为"按大小",再将代码中的/on改成/os
看看是否会好些。

TOP

回复 6# apang

谢谢您了!!非常真诚的!

TOP

返回列表