Board logo

标题: [文件操作] 如何对指定文件复制创建复件/备份并在文件名后面添加当前日期和序号 [打印本页]

作者: ray2350    时间: 2012-9-26 03:08     标题: 如何对指定文件复制创建复件/备份并在文件名后面添加当前日期和序号

本帖最后由 pcl_test 于 2017-4-11 09:18 编辑

我有一个文件经常修改,所以想弄个日期然后接个序号的.
我自己弄了一个,感觉不如意.
特请大神出手相助.
我的目的是这样的:
我的一个固定文件是  日报表.xls
然后我想弄一个批处理,一点,就出来  日报表0926-1.xls
然后再点这个批处理,就出一个新文件 日报表0926-2.xls
  1. set /p n=<编号
  2. set name=日报表%date:~5,2%.%date:~8,2%-%n%.xls
  3. set /a x=%n%+1
  4. >编号 echo %x%
  5. copy /y 日报表.xls %name%
复制代码
这样虽能达到要求,但是就是有一个 生成的文件 编号 用他来装序号.
我现在想,能不能用一个文件实现.
请大神赐教 .
拜谢.
作者: forfiles    时间: 2012-9-26 10:58

  1. @echo off
  2. set n=1
  3. for /f %%a in ('dir /b 日报表%date:~5,2%.%date:~8,2%-*.xls 2^>nul ^|find /v /c ""') do (
  4.     set /a n+=%%a
  5. )
  6. set name=日报表%date:~5,2%.%date:~8,2%-%n%.xls
  7. copy /y 日报表.xls %name%
复制代码

作者: ray2350    时间: 2012-9-26 13:49

回复 2# forfiles

    感谢  forfiles   的热心指点.
我在提问的时候,忽略了一点:
当我确认某个备份的文件无用的时候,会删除掉这个文件.
这样,就不能用到上面这个 dir 加 find 再读有几个文件了.
当文件数不对的时候,这个不会像写到一个序号文件一样的继续累加.
继续追问下,有劳了.
作者: ray2350    时间: 2012-9-26 21:24

我有想过,把 批处理里的内容 再次导出来,生成一个批处理,替换自身.
同时,把序号 +1
但是不知道如何循环导出.
有大神援手一把么.
作者: ray2350    时间: 2012-9-27 22:28


手工置顶一下.
继续寻找大神出手.
作者: apang    时间: 2012-9-27 23:13

这样子如何?
  1. @echo off
  2. set "name=日报表%date:~5,2%%date:~8,2%"
  3. :11
  4. set /a n+=1
  5. if not exist "%name%-%n%.xls" (
  6.   copy /y 日报表.xls "%name%-%n%.xls"
  7. ) else goto :11
复制代码

作者: batman    时间: 2012-9-27 23:26

本帖最后由 batman 于 2012-9-27 23:30 编辑

为了方便,修改了分格符
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=_." %%a in ('dir /b /o-n 日报表*.xls') do (
  3.   if "%%b" equ "" (
  4.     copy /y 日报表.xls  "日报表%date:~5,2%-%date:~8,2%_1.xls"
  5.     ) else (
  6.     set /a a=%%b+1
  7.     copy /y 日报表.xls  "日报表%date:~5,2%-%date:~8,2%_!a!.xls"
  8.   )
  9.   exit
  10. )
复制代码

作者: ray2350    时间: 2012-9-28 13:24

回复 6# apang


    感谢 apang  出手相助.
这个能满足开始说的条件,后面补充了一个条件,这个还是不能,当有删除的时候,这个只会补充空缺,不会累加向前.
不过依旧感谢提供这样一个思路.
作者: ray2350    时间: 2012-9-28 13:58

回复 7# batman


    感谢 batman 的杰作.虽然是改了一个分割符,但这个没关系.除非全部删除备份,或是将最后一个备份删除,其实都正常累加.

思考了很久,一直没想明白这个 批处理里面的那个 条件,为什么是
  1. if "%%b" equ ""
复制代码
而不是
  1. if "%%b" equ "txt"
复制代码
但这两者能都达到要求,其中的原因是什么?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2