Board logo

标题: 主管布置周一交的任务,望高手相助~DOS.BAT文件改名应用程序 [打印本页]

作者: samzj     时间: 2006-10-15 09:48    标题: 主管布置周一交的任务,望高手相助~DOS.BAT文件改名应用程序

文件改名应用程序
需求如下:
1. 用于在命令行下改名。
2. 格式 changename source
3. 扩展名保持不变
4. destination=source + date + "@" +time,也就是说,目标文件名是源文件名+当前日期+"@"+时间
举例: ack.txt, 假设运行程序时间为2006-09-17, 14:22:50
执行change ack
输出结果ack20060917@142250.txt

在线等,万分感谢。。。

更新下,系统是2000的。

[ Last edited by namejm on 2006-11-6 at 01:23 PM ]
作者: fastslz     时间: 2006-10-15 09:53
说下运行环境
作者: samzj     时间: 2006-10-15 09:55
主管就跟我说是DOS程序,我这方面还是很菜的。。程序应该在2000下运行的,谢谢了
作者: fastslz     时间: 2006-10-15 10:03
等别人吧,2000我没测试环境
作者: samzj     时间: 2006-10-15 10:09
Fastslz,谢谢了,你能帮忙做个XP的吗,毕竟公司里大多数是2000的,但也有十多台是XP的~~
作者: namejm     时间: 2006-10-15 10:12
  目前大多数人使用的是XP的系统,2K系统个人用户使用得已经比较少了。XP下的日期和2K下的日期格式不太一样,如果用户对日期的长短格式做了设置的话,就算是同是XP的机子,日期的格式也是不一样的,2K下可能也是这样的情况。请楼主在你的2K机子上分别运行 date 和 time,然后把结果发出来看看再说。一旦解决了日期问题,其他的问题都不在话下。
作者: electronixtar     时间: 2006-10-15 10:14
我重来不帮别人做作业,呵呵。我不会透露作业都是我亲手自己抄的这个秘密的~~~
作者: samzj     时间: 2006-10-15 10:17
谢谢斑竹和fastslz
C:\Documents and Settings\Administrator>date
当前日期: 2006-10-14 星期六
输入新日期: (年月日)

C:\Documents and Settings\Administrator>time
当前时间: 22:11:17.54
输入新时间:

这是我家里的XP,公司的机器不管是XP和2000也都是默认的时间设置,因为都是我安装的,没动过这方面的设置
作者: fastslz     时间: 2006-10-15 10:19
@echo off
for /F "tokens=1-3 delims=/- " %%A in ('date/T') do set DATE=%%A%%B%%C
for /F "tokens=1-2 delims=/: " %%A in ('time/T') do set TIME=%%A%%B
for %%i in (E:\ack.txt) do copy %%i E:\%%~ni%DATE%@%TIME%.txt
作者: samzj     时间: 2006-10-15 10:21
electronixtar,其实我也不想让别人帮做的,我试过用VB写,可老错误,主管后来说要DOS下程序的,我对这方面不是很熟悉,所以找到了这个论坛暂时解决当务之急,然后再好好的学习下:)
作者: fastslz     时间: 2006-10-15 10:27
TIME只能是4位数哦,如果要求是重命名copy换成move
作者: zh159     时间: 2006-10-15 10:29

@echo off
setlocal EnableDelayedExpansion
set date$=%date%&&set date$=!date$:~0,10!&&set date$=!date$:-=!
set time$=%time%&&set time$=!time$:~0,8!&&set time$=!time$::=!

echo %1 %~n1%date$%@%time$%%~x1

@echo off
echo %1 %~n1%date:~0,4%%date:~5,2%%date:~8,2%@%time:~0,2%%time:~3,2%%time:~6,2%%~x1
将“echo”改为“copy”...
运行格式都是:bat *.txt(需要带文件扩展名)

[ Last edited by zxcv on 2006-10-14 at 22:30 ]
作者: samzj     时间: 2006-10-15 10:33
fastslz:万分感谢,我这边做了您的测试程序,XP下OK了。。现在就是不知道2000下如何执行,可否提供下您的MSN,以便于我周一和您联系。。或者我的MSN:delonkgb@hotmail.com 顺便谢谢以上所有提供信息的同志~
作者: samzj     时间: 2006-10-15 10:42
再次感谢以上所有的斑竹和其他热心的朋友 。。。

顺便问下qwe1234567斑竹,
ren *.txt *%a%.txt 我是不是可以理解我想把TEST.TXT这个文件修改,只要把*.txt换成test.txt就可以了??需要路经吗。。

具体情况我到周一时再给大家看下最终的状况,有问题再麻烦大家,再次谢谢大家的热心相助。

[ Last edited by samzj on 2006-10-15 at 10:47 ]
作者: fastslz     时间: 2006-10-15 10:47
msn查看我的资料
作者: samzj     时间: 2006-10-15 10:55
qwe1234567斑竹,您刚才发的2000环境下的程序代码怎么不见了?
作者: 不得不爱     时间: 2006-10-15 10:56

set a=%date:~4,4%%date:~9,2%%date:~12,2%@%time:~0,2%%time:~3,2%%time:~6,2%
ren *.txt *%a%.txt
你如果想把TEST.TXT这个文件修改,只要把*.txt换成test.txt就可以,你如果把这个文件放在你需要改文件名的文件夹里就可以不要路径,还可以改所有的TXT文件名!

[ Last edited by qwe1234567 on 2006-10-15 at 10:57 ]
作者: samzj     时间: 2006-10-15 11:00
非常感谢,周一我看主管到底还有还需要其他特殊功能~~~
作者: zh159     时间: 2006-10-15 11:00
参照qwe1234567版主2K的修改一下:
XP
@echo off
set datetime=%~n1%date:~0,4%%date:~5,2%%date:~8,2%@%time:~0,2%%time:~3,2%%time:~6,2%%~x1
echo %1 %datetime%
2K
@echo off
set datetime=%~n1%date:~4,4%%date:~9,2%%date:~12,2%@%time:~0,2%%time:~3,2%%time:~6,2%%~x1
echo %1 %datetime%
把“echo”改为“copy”、“ren”...
运行方式均为:bat *.txt(带扩展名)
作者: fastslz     时间: 2006-10-15 12:18
综合zxcv、qwe1234567版主,DOS.BAT内容
@echo off
if "%1"=="/?" echo 将目标文件名重命名为“源文件名+当前日期+@+时间” &&echo.&&echo 语法: DOS filename &&PING/n 4 127.1>NUL &&exit
if "%1"=="" echo 将目标文件名重命名为“源文件名+当前日期+@+时间” &&echo.&&echo 语法: DOS filename &&PING/n 4 127.1>NUL &&exit
ver|find /i "xp">nul
if not errorlevel 1 set datetime=%~n1%date:~0,4%%date:~5,2%%date:~8,2%@%time:~0,2%%time:~3,2%%time:~6,2%%~x1
ver|find /i "2000">nul
if not errorlevel 1 set datetime=%~n1%date:~4,4%%date:~9,2%%date:~12,2%@%time:~0,2%%time:~3,2%%time:~6,2%%~x1
if "%datetime%"=="" echo 此程序必须在Windows xp或Windows 2000系统上运行 &&ping/n 4 127.1>nul &&exit
echo %1 %datetime%

作者: 3742668     时间: 2006-10-15 13:00

On Error Resume Next

Set objArgs = WScript.Arguments
If objArgs.Count < 1 Then
    WScript.Echo "用鼠标把文件拖到该文件上或带参数运行!"
    WScript.Quit
End If

For Each strFile In objArgs
    strNewFile = Mid(strFile,1,InStrRev(strFile,".") _
                   - 1) & Replace(Date,"-","") & "@" _
                   & Replace(Time,":","") & _
                   Mid(strFile,InStrRev(strFile,".") )
    If Len(Trim(strNewFile)) = 0 Then
        strNewFile = strFile & Replace(Date,"-","") & _
        "@" & Replace(Time,":","")
    End If
    ReName strFile , strNewFile
Next


Sub ReName (strFile,strNewFile)
    WScript.Echo  strFile & vbLf & strNewFile
    CreateObject("Scripting.FileSystemObject") _
        .MoveFile strFile,strNewFile
End Sub
拷贝到SendTo,然后把要改的文件全部选定发送到...就行了。
或者在bat里面带多参数调用,可以更改ReName过程下第一句的vblf为","用来显示更改明细以便形成日志.
作者: milertom     时间: 2006-10-15 22:51
我这里只有不到上午11点,怎么你们都
2006-10-15 13:00了,
版主啊,服务器时间是不是有问题啊
作者: samzj     时间: 2006-10-16 22:53
各位高手
  刚才主管跟我说是在2000  server en 环境下测试的,我copy了下date与time
C:\Documents and Settings\Administrator>date
The current date is: 10/16/2006 Mon
Enter the new date: (mm-dd-yy)

C:\Documents and Settings\Administrator>time
The current time is: 10:44:17.73
Enter the new time:

fastslz,您能登下MSN吗,我想请教你些问题,万分感谢
作者: 不得不爱     时间: 2006-10-16 23:04

set a=%date:~6,4%%date:~0,2%%date:~3,2%@%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
ren *.txt *%a%.txt

作者: maya0su     时间: 2006-10-16 23:13
@echo off
set /p yy=欲处理文件的路径:
set /p uu=欲处理文件的名称:
for /F "tokens=1-3 delims=/- " %%A in ('date/T') do set DATE=%%A%%B%%C
for /F "tokens=1-2 delims=/: " %%A in ('time/T') do set TIME=%%A%%B
for %%i in (%yy%:\%uu%) do copy %%i %yy%:\%%~ni%DATE%@%TIME%.txt

借用了fastslz的代码,不过加上如上几句,可以处理任何一个盘符的文件!另:欲处理文件的路径: 在显示这句时,盘符不用输入冒号的!
作者: fastslz     时间: 2006-10-17 00:01


  Quote:
Originally posted by samzj at 2006-10-16 22:53:
各位高手
  刚才主管跟我说是在2000  server en 环境下测试的,我copy了下date与time
C:\Documents and Settings\Administrator>date
The current date is: 10/16/2006 Mon
Enter t ...

英文版的时间顺序不一样的
如果用我的代码把
for /F "tokens=1-3 delims=/- " %%A in ('date/T') do set DATE=%%A%%B%%C

替换成
for /F "tokens=1-3 delims=/- " %%A in ('date/T') do set DATE=%%C%%B%%A

也就换了一下顺序,这个容易掌握
作者: vkill     时间: 2006-10-17 01:09
这样的问题最好

echo %time%
echo %date%

把这两个显示发上来
作者: 不得不爱     时间: 2006-10-17 02:21

@echo off
set /p lj=欲处理文件的路径:
set /p wjm=欲处理文件的名称:
copy %lj%%wjm% %lj%%wjm%%date:~10,4%%date:~4,2%%date:~7,2%@%time:~0,2%%time:~3,2%%time:~6,2%.txt

作者: samzj     时间: 2006-10-17 03:58
谢谢各位的热心帮助~~~~
今天在qwe1234567斑竹的远程指导下,最终暂时解决了这个问题,
测试环境 2000 server en

C:\Documents and Settings\Administrator>date
The current date is: 10/16/2006 Mon
Enter the new date: (mm-dd-yy)

C:\Documents and Settings\Administrator>time
The current time is: 15:56:45.35
Enter the new time:


set a=%date:~10,4%%date:~4,2%%date:~7,2%@%time:~0,2%%time:~3,2%%time:~6,2%
copy c:\test.bat test%a%.bat

最终成功,谢谢以上所有回贴帮忙的人!!!!
作者: samzj     时间: 2006-10-17 03:59
以及还要十分感谢fastslz的耐心讲解~~~~~~等等等等
作者: samzj     时间: 2006-11-6 23:41
qwe1234567斑竹,运用出现了一个问题,当时间从00:00到09:59时就会出现错误,无法得到任何结果,其余时间段正常...主管跟我说可能是第一个0上出现了问题,请问大概有解决的方法吗...

各位知道的朋友也请讲解下..

:\Documents and Settings\Administrator>date
The current date is: 10/16/2006 Mon
Enter the new date: (mm-dd-yy)

C:\Documents and Settings\Administrator>time
The current time is: 15:56:45.35
Enter the new time:


set a=%date:~10,4%%date:~4,2%%date:~7,2%@%time:~0,2%%time:~3,2%%time:~6,2%
copy c:\test.bat test%a%.bat
作者: zh159     时间: 2006-11-6 23:57
%time%方式在00:00到09:59时没有前面的0
利用延迟变量:

setlocal EnableDelayedExpansion
set time$=%time:~0,8%&&set time$=!time$::=!&&set time$=!time$: =0!
set a=%date:~10,4%%date:~4,2%%date:~7,2%@%time$%
copy c:\test.bat test%a%.bat

不用延迟变量:
set time$=%time:~0,8%
set time$=%time$::=%
set time$=%time$: =0%
set a=%date:~10,4%%date:~4,2%%date:~7,2%@%time$%
copy c:\test.bat test%a%.bat
作者: samzj     时间: 2006-11-7 00:32
zxcv:万分感谢,用了第二个的不用延迟变量成功了...
作者: zh159     时间: 2006-11-7 04:28
原理:
set time$=%time:~0,8%
获取%time%(“ 9:59:45.35”)前8位,“ 9:59:45”(前第一位小于10时为空格)
set time$=%time$::=%
去处“ 9:59:45”中的“:”冒号:“ 95945”
set time$=%time$: =0%
将“ 95945”中的空格替换为“0”,“095945”