[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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%
复制代码
这样虽能达到要求,但是就是有一个 生成的文件 编号 用他来装序号.
我现在想,能不能用一个文件实现.
请大神赐教 .
拜谢.

回复 7# batman


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

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

TOP

回复 6# apang


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

TOP

本帖最后由 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. )
复制代码
***共同提高***

TOP

这样子如何?
  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
复制代码

TOP


手工置顶一下.
继续寻找大神出手.

TOP

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

TOP

回复 2# forfiles

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

TOP

  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%
复制代码

TOP

返回列表