无忧启动论坛

标题: 有没有办法让windows下备份生成的文件名用变量代替? [打印本页]

作者: wuyou    时间: 2006-11-5 17:41
标题: 有没有办法让windows下备份生成的文件名用变量代替?
如让备份产生的文件名是当天的日期或周期几,如20061105.tib或0.tib(0-6)。
如果可以实现,对于需要多个备份的就很有用,只要一个任务就可以得到不同日期的多个备份。
作者: Acronis    时间: 2006-11-5 20:42
可以吧,不是有一个地方可以设置备份之前或者完成之后执行某个程序/批处理吗?用这个将刚生成的tib按日期格式重命名应该不难吧。
作者: 老毛桃    时间: 2006-11-5 20:46
不知道老大打算是怎样执行 ATI,以命令行执行?如果命令行可以的话,下面的批处理应该有点用处

  1. @echo off
  2. for /f "tokens=1,2" %%i in ('date /t') do set datename=%%i_%%j
  3. for /f "tokens=1,2 delims=:" %%i in ('time /t') do set timename=%%i-%%j.tib
  4. echo 完整文件名为:%datename%_%timename%
  5. echo.
  6. pause
复制代码

作者: zgzxp    时间: 2006-11-5 20:48
毛桃的CMD确实行
作者: wuyou    时间: 2006-11-5 21:50
谢谢Acronis 和老毛桃的指点!
老毛桃的命令在windows自带的CMD下可以用,但会把星期也加进去。

如果把 for /f "tokens=1,2" %%i in ('date /t') do set datename=%%i_%%j 改为
for /f "tokens=1" %%i in ('date /t') do set datename=%%i

则没有星期输出(不同机子可能要用 for /f "tokens=2" %%i in ('date /t') do set datename=%%i)。

date这个命令在普通的启动盘DOS下,无法使用date /t,参数/t应该是在windows的cmd环境使用吧?

如果在WINDOWS下,放在ati 的windows程序后运行命令的话,可以用
set datename=%date:~4,4%%date:~9,2%%date:~12,2%.tib
ren MyBackup.tib %datename%

获得 当前日期的参数如 20061105.tib

第一行这个命令
set datename=%date:~4,4%%date:~9,2%%date:~12,2%.tib 也有可能是要改为
set datename=%date:~0,4%%date:~5,2%%date:~8,2%
不同机子在windows下执行date,星期出现有可能在前,也有可能在后。
作者: wuyou    时间: 2006-11-6 00:57
老毛桃的 for /f "tokens=1,2" %%i in ('date /t') do set datename=%%i_%%j  这一行改为
for /f "tokens=1,2,3 delims=/-. " %%i in ('date /t') do set datename=%%i%%j%%k 比较好,这样可以直接获得20061105 这样格式的变量,并且不受日期分隔符的影响。
作者: wuyou    时间: 2006-11-6 01:21
有点晕了,这个date /t的,有时候会输出星期几,有时候则没有,同样都是在windows xp 的cmd下。
经检查发现,在windows xp的区域和语言选 项中,中文(中国) 自定义 > “自定义区域选项”>"日期"里面,短日期格式如果用:yyyy-MM-dd,就没有星期出现,如果用 yyyy-M-d 格式,则有星期出现。
作者: wuyou    时间: 2006-11-6 01:52
http://menghuanxuan.anyp.cn/ziyu ... 424960&m=800344 转贴:

DATE命令的用法

1.系统帮助
C:\>date /?
显示或设置日期。

DATE [/T | date]

仅键入 DATE 而不加参数,可以显示当前日期设置,并且提示
您输入新的日期。按 ENTER 键即可保持原有日期。

如果命令扩展名被启用,DATE 命令会支持 /T 命令选项;该命令选项告诉
命令只输出当前日期,但不提示输出新日期。

2.DATA /T 参数说明

此参数输出当前日期,例如:

C:\>DATE /T
2002-10-28 星期一

这个日期格式可能不同与环境变量中的日期格式,如

C:\>echo %DATE%
星期一 2002-10-28

用for命令,可以组合出不同的表达,例如:

C:\>for /f "tokens=1,2" %a in ('date/t') do set date=%a

C:\>set date=2002-10-28
这条语句所做的的就是在date/t中取出不含星期的部分。

我们可以用更简单的命令得出相同的结果,如:

C:\>echo %DATE%
星期一 2002-10-28

C:\>echo %DATE:~4,10%
2002-10-28

如果想在批处理中以日期建立文件夹或者文件名都可以简单的做到了,如

C:\>mkdir %DATE:~4,10%
C:\>dir 2*
驱动器 C 中的卷是 本地磁盘
卷的序列号是 402A-3A7E

C:\ 的目录

2002-10-28 19:34 <DIR> 2002-10-28
0 个文件 0 字节
1 个目录 79,282,176 可用字节

C:\>copy mylist mylist%DATE:~4,10%
已复制 1 个文件。

C:\>dir my*
驱动器 C 中的卷是 本地磁盘
卷的序列号是 402A-3A7E

C:\ 的目录

2002-09-15 10:00 38 mylist
2002-09-15 10:00 38 mylist2002-10-28
3 个文件 446 字节
0 个目录 79,282,176 可用字节

这对于Oracle中的某些自动操作是很有用的。

可以看到,通过简单的DOS命令的组合,我们可以做到很多看似复杂的事情,只是我们的思维

并不总是能够到达那里。

3.关于%DATE:~4,10%的格式

这个命令的意思就是在DATE的输出中,取4-10中间的字符。
对于不同的机器,可能有不同的时间格式,这个可以在控制面板里设置。
可以通过ECHO命令察看当前设置,如:

C:\>echo %DATE%
星期一 2002-10-28

当然,我们可以同样取到星期的值:

C:\>echo %DATE:~0,3%
星期一

当然也可以从不同方向来:

C:\>echo %DATE:~-10%
2002-10-28

C:\>echo %DATE:~0,-10%
星期一
作者: wuyou    时间: 2006-11-6 10:02
整理一下。
加一个判断,以适应date 在不同的环境下,出现星期几在日期前、后或不出现的的格式变化,文件名只用日期(20061106这种格式)。

@echo off
for /f "tokens=1,2,3 delims=/-. " %%a in ('date /t') do set datename=%%a%%b%%c
if %date:~0,2%=="星期" for /f "tokens=2,3,4 delims=/-. " %%a in ('date /t') do set datename=%%a%%b%%c
echo %datename%
pause
作者: wuyou    时间: 2006-11-6 10:23
如果要使用当前星期产生相应的0-6数字(星期日到星期六),可以使用以下命令。注意先检查 date /t 结果,要有星期几显示,年份是四位数的。

@echo off
set a=%date:~0,3%
if %date:~11,2%=="星期" set a=%date:~11,3%

if "%a%"=="星期一" set weekn=1
if "%a%"=="星期二" set weekn=2
if "%a%"=="星期三" set weekn=3
if "%a%"=="星期四" set weekn=4
if "%a%"=="星期五" set weekn=5
if "%a%"=="星期六" set weekn=6
if "%a%"=="星期日" set weekn=0

echo %weekn%
pause




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3