中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [分享]批量重命名并保留还原操作
作者:
标题: [分享]批量重命名并保留还原操作 上一主题 | 下一主题
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『楼 主』:  [分享]批量重命名并保留还原操作

在bathome帮人的时候做的。重归cn-dos ,先呈上。
原地址http://bbs.bathome.cn/viewthread.php?tid=5321


楼主原本的要求

  Quote:
功能就是:
1、能给指定的文件进行重命名(如果用户输入的地址为文件夹,那将重命名文件夹下所有文件)
2、重命名之后,能生成重命名名单。为了防止出错,给用户反悔的机会,会生成还原原文件名。

我要的效果:给所有文件或者文件末尾加个字母s,2。可以随便命名任何后缀名的文件,并且我只要1bak加文件名~nbak加文件名就可以了,比如1.txt,2.txt,3.txt批处理后为1bak1.txt 2bak2.txt 3bak3.txt,批处理背景颜色为绿色。

我只是大概实现。最后代码 在14楼

  Quote:
实现了可选择多个恢复的功能

下面代码执行生成 smalltool 文件夹  里面有 rn.bat 和 Returnx.bat

执行 rn.bat 后  生成backz.cmd  
再次rn.bat的话 原来的back批处理会被加上编号,然后生成新的 backz.cmd
backz.cmd都是刚生成的。rn.bat会在back批处理首行写入时间和操作信息。
      这个时候如果要恢复,可以打开Returnx.bat  
它会列出每个back批处理对应的时间和当时选择的操作数,这个时候自己根据信息选择
一个Back文件名,输入。
      通过Returnx.bat 执行 back 操作,会对应的删除那个back文件。
      每次执行rn.bat的时候都会对back文件名做整理使其按操作顺序排好名字


@set file="rn.bat" "Returnx.bat"
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit
:setup
if not exist smalltool md smalltool
set "act="
for /f "delims= eol=" %%a in (%~nx0) do (
  if "%%a"=="::%* end" (goto :eof)
  if defined act echo,%%a>>"smalltool\%*"
  if "%%a"=="::%*" errcommand>"smalltool\%*" 2>nul&set act=act
)
::Returnx.bat
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir back* /b') do (
  set /p now=<%%a
  echo, %%~na -- !now!
)
set /p cho="输入对应的还原批处理脚本名称(无需格式):"
call %cho%.cmd
del %cho%.cmd
echo,执行完成
pause

::Returnx.bat end
::rn.bat
@echo off &setlocal enabledelayedexpansion
title 批量重命名工具
echo, &echo,  请输入将执行批量重命名操作的路径,如: F:\tempfolder\
echo, &echo,  注:  输入路径不需要加双引号,由批处理做统一处理.
echo,
:a
  set /p in="请输入操作路径:"
if not exist "%in%" (echo, -输入不正确&echo, &goto :a)
if not "%in:~-1%"=="\" (set in=%in%\)
:b
  set /p in2="请输入将要批量重命名的文件的格式(如: txt):"
if not exist "%in%*.%in2%" (echo, 不存在该格式 &echo, &goto :b)
:
set bk=1
:sortback
if exist back* (set "inp=%~dp0" &set "inp2=cmd" &set "spc=back" &call :listname ::)
set inp=%in%
set inp2=%in2%

:
   echo,&echo, 1  批量把%inp% 目录下的 %inp2%文件按pak1~pakn 顺序重命名
   echo,&echo, 2  批量给文件后缀加s
   echo,
:
  :c
  set /p inp3="请选择操作模式:"
  echo,::%date% , %time% , %inp% 选择的操作 %inp3% >backz.cmd
  if "%inp3%"=="1" (goto :listname)
  if "%inp3%"=="2" (goto :adds) else (echo, -请正确输入 &goto :c)

:listname
if "%1"=="" (set spc=pak)
set /a n=1
ren "%inp%*.%inp2%" *.x_x
::上面这句ren是为了避免偶尔出现的细节上的冲突
for /f "tokens=*" %%a in ('dir "%inp%*.x_x" /b') do (
%1 echo,ren "%inp%%spc%!n!.%inp2%" "%%a">>backz.cmd
   ren "%inp%%%a" %spc%!n!.%inp2%
   set /a n+=1
)
%1 echo,ren "%inp%*.x_x" *.%inp2%>>backz.cmd
if "%1"=="::" (goto :eof)
goto :over
:
:adds
ren "%inp%*.%inp2%" *.%inp2%s
echo,ren "%inp%*.%inp2%s" *.%inp2%>>backz.cmd
goto :over
:
:over
echo,任务结束。Press any key to exit...
pause>nul &exit

::rn.bat end
[ Last edited by 523066680 on 2009-8-19 at 11:48 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 vlq5299 分数: +2  时间:2009-8-20 07:10




综合型编程论坛

我的作品索引
  
2009-8-19 11:39
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 2 楼』:  


@set file="rn.bat" "Returnx.bat" "说明.txt"
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit
:setup
if not exist smalltool md smalltool
set "act="
for /f "delims= eol=" %%a in (%~nx0) do (
   if "%%a"=="::%* end" (goto :eof)
   if defined act echo,%%a>>"smalltool\%*"
   if "%%a"=="::%*" errcommand>"smalltool\%*" 2>nul&set act=act
)
::Returnx.bat
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir *.x /b') do (
   set /p now=<%%a
   echo, %%~na -- !now!
)
set /p cho="输入对应操作的编码(最后一个为Z)以恢复: "
ren %cho%.x %cho%.cmd
call %cho%.cmd
del %cho%.cmd
echo,执行完成
pause

::Returnx.bat end
::rn.bat
@echo off &setlocal enabledelayedexpansion
title 批量重命名工具
echo, &echo,   请输入将执行批量重命名操作的路径,如: F:\tempfolder\
echo, &echo,   注:   输入路径不需要加双引号,由批处理做统一处理.
echo,
:a
   set /p in="请输入操作路径:"
if not exist "%in%" (echo, -输入不正确&echo, &goto :a)
if not "%in:~-1%"=="\" (set in=%in%\)
:b
   set /p in2="请输入将要批量重命名的文件的格式(如: txt):"
if not exist "%in%*.%in2%" (echo, 不存在该格式 &echo, &goto :b)
:
set bk=1
:sortback
if exist back* (set "inp=%~dp0" &set "inp2=x" &set "spc=back" &call :listname ::)
set inp=%in%
set inp2=%in2%

:
echo,&echo,当前所在目录"%inp%"
echo,&echo,    输入特征前缀如: x 则把 %inp2% 文件按:
echo,&echo, x1.%inp2% , x2.%inp2% , x3.%inp2%....  顺序重命名
echo,
:
   :c
   set /p inp3="请输入特征前缀[一般为字母,不要输入符号]: "
   echo,: %date:~0,10% %time%  处理 %inp2%文件 特征符%inp3%>z.x

:listname
if "%1"=="" (set spc=%inp3%)
set /a n=1
ren "%inp%*.%inp2%" *.x_x
::上面这句ren是为了避免偶尔出现的细节上的冲突
for /f "tokens=*" %%a in ('dir "%inp%*.x_x" /b') do (
%1 echo,ren "%inp%%spc%!n!.%inp2%" "%%a">>z.x
ren "%inp%%%a" %spc%!n!.%inp2%
%1 echo, %spc%!n!.%inp2%
set /a n+=1
)
%1 echo,ren "%inp%*.x_x" *.%inp2%>>z.x
if "%1"=="::" (goto :eof)
goto :over

:over
echo,任务结束。Press any key to exit...
pause>nul &exit

::rn.bat end


::说明.txt

实现了可选择多个恢复的功能

    主代码执行生成 smalltool 文件夹   里面有 rn.bat 和 Returnx.bat

    执行 rn.bat 为重命名操作。 如果要恢复,可以打开Returnx.bat  

    它会列出每个对应的时间和当时选择的操作,这个时候自己根据信息选择
一个编号。

::说明.txt end




综合型编程论坛

我的作品索引
  
2009-8-26 12:31
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: