. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』 » 专题:命令正则

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#1 旧 2010-08-24, 12:49:18 默认 已解答: 【求助】求一批处理
Huangwen 当前离线  

求一批处理:
要求:
在当前目录下复制”任意扩展名文件“自身并重命名(在原文件名后加_bak),如同文件名文件存在则自动在_bak后加(1)、(2)...
目的:想在TC里加这个批处理文件为按钮,方便修改文件时备份。
请朋友们帮忙,谢谢!!
最佳解答为:mouze
批处理可以这样写:
代码:
@echo off
set num=1
:st
if not exist "%~n1_bak%~x1" (copy %1 "%~n1_bak%~x1") else (
   if not exist "%~n1_bak(%num%)%~x1" (copy %1 "%~n1_bak(%num%)%~x1") else (
      set /a num+=1
      goto st
      )
   )
很少用TC,不知道怎样把批处理弄成按钮。试了一下,似乎把批处理做成按钮后,把需要处理的文件拖放到按钮上,就成功;但是选中文件再去点按钮就没反应。
pomuyu
 
pomuyu 的头像
高级会员
 
资 料:
注册日期: Jul 2010
帖子: 815 声望值: 3
精华: 0,解答: 44
#2 旧 2010-08-24, 14:01:11 默认
pomuyu 当前离线  

不知道楼主用不用AutoHotkey,用的话可以试下俺常用的备份单文件小脚本::blush;

代码:
^F2:: ;bak with timestamp.
    oldClip = %Clipboard%
    AppendName = %A_YYYY%%A_MM%%A_DD%.T%A_Hour%%A_Min%%A_Sec%
    StringTrimLeft, AppendName, AppendName, 2
    PostMessage, 1075,3100,0,,ahk_class TTOTAL_CMD  ; cm_CopySamepanel=3100;Copy within panel
   
    Clipboard =
    sendinput, ^c
    clipwait, 2
    oringalName = %Clipboard%
    length := StrLen(oringalName)
    StringGetPos, position, oringalName, ., R, Offset

    if position = -1
    {
        send, {end}
    }
    else
    {
        leftOffset := length - position
        send, {left %leftOffset%}
    }
    Clipboard = .%AppendName%
    sendinput, ^v
    sleep, 300
  
    sendinput, {shift down}{left 14}{shift up}   
    ClipBoard = %oldClip%
return
效果:
在TC中选中test.bakup文件后,按下CTRL+F2,会弹出TC内部的“将复制到”对话框,填充名为“test.100824.T135322.bakup”并且选中“100824.T135434”。选中部分为按下Ctrl+F2时的时间 2010-08-24,13:54:34

此时:回车接受当前名;Esc取消复制;直接输入可以更改新备份名称。


关于笔记本机械硬盘数据恢复的求助帖,请您指点:
https://bbs.et8.net/bbs/showthread.php?p=17310314#post17310314
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,205 声望值: 13
精华: 5,解答: 65
#3 旧 2010-08-24, 14:15:03 默认
mouze 当前离线  

批处理可以这样写:
代码:
@echo off
set num=1
:st
if not exist "%~n1_bak%~x1" (copy %1 "%~n1_bak%~x1") else (
   if not exist "%~n1_bak(%num%)%~x1" (copy %1 "%~n1_bak(%num%)%~x1") else (
      set /a num+=1
      goto st
      )
   )
很少用TC,不知道怎样把批处理弄成按钮。试了一下,似乎把批处理做成按钮后,把需要处理的文件拖放到按钮上,就成功;但是选中文件再去点按钮就没反应。
_森森_
 
_森森_ 的头像
热心会员
 
资 料:
注册日期: Feb 2010
帖子: 1,266 声望值: 5
精华: 0,解答: 31
#4 旧 2010-08-24, 14:38:41 默认
_森森_ 当前离线  

引用:
作者: mouze 查看帖子
很少用TC,不知道怎样把批处理弄成按钮。试了一下,似乎把批处理做成按钮后,把需要处理的文件拖放到按钮上,就成功;但是选中文件再去点按钮就没反应。
命令给参数就好了

%P%N
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#5 旧 2010-08-24, 14:42:17 默认
Huangwen 当前离线  

引用:
作者: mouze 查看帖子
批处理可以这样写:
[code]@echo off
set num=1
t
if not exist "%~n1_bak%~x1" (copy %1 "%~n1_bak%~x1") else (
if not exist "%~n1_bak(%num%)%~x1" (copy %1 "%~n1_bak(%nu...
谢谢LS二位,测试都可用。3#的批处理比较快捷。2#的Ahk脚本命名较灵活。
usercmd.ini:
[em_filebak]
cmd=路径\bakbat.bat
param=%P%N
path=

此帖于 2010-08-24 16:50:54 被 Huangwen 编辑. .
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,205 声望值: 13
精华: 5,解答: 65
#6 旧 2010-08-24, 16:38:12 默认
mouze 当前离线  

不知道楼主在相同目录内备份文件多不多,就是 _bak(*) 里的数字有多大?

如果有几百,我原来写的代码执行效率会很低,我刚才在一台P4老爷机上试了一下,如果达到500个备份文件,执行时间会高达6、7秒。。。

如果要快可以换用以下代码:
代码:
@echo off
if not exist "%~n1_bak%~x1" copy %1 "%~n1_bak%~x1"&goto :eof
for /l %%A in (1,1,9999) do if not exist "%~n1_bak(%%A)%~x1" copy %1 "%~n1_bak(%%A)%~x1"&goto :eof
但是,上述代码把 _bak(*) 里的数字限制为9999,如果需要更大的数字就要相应改写一下。

此帖于 2010-08-24 16:48:25 被 mouze 编辑. .
Huangwen
 
Huangwen 的头像
高级会员
 
资 料:
注册日期: Sep 2004
帖子: 616 声望值: 3
精华: 0,解答: 16
#7 旧 2010-08-24, 17:07:06 默认
Huangwen 当前离线  

引用:
作者: mouze 查看帖子
不知道楼主在相同目录内备份文件多不多,就是 _bak(*) 里的数字有多大?

如果有几百,我原来写的代码执行效率会很低,我刚才在一台P4老爷机上试了一下,如果达到500个备份文件,执行时间会高达6、7秒。。。

如果要快可以换用以下代码:
[CODE]@echo off
if not exist "%~n1_bak%...
谢谢,一般情况下备份文件在100以内。
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 20:57:48.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号