代码之家  ›  专栏  ›  技术社区  ›  Jeremy Meo

如何从Windows批处理文件中的递归副本中排除特定目录?

  •  1
  • Jeremy Meo  · 技术社区  · 16 年前

    我正在编写一个shell脚本,将当前目录的内容备份到一个时间戳子目录, ./STATES/$DATE . 显然我不想 STATES 每次备份文件夹时都要重新复制目录本身,因此我需要以某种方式将其从副本中排除。

    下面是一个未经测试的shell脚本,演示了我如何在*nix上处理此问题:

    ID="$(date +%Y%b%d%H%M%S)"
    COMMITABLE="$(ls | egrep --invert-match ^STATES\$)"
    STATE_PATH="$(pwd)/STATES/$ID"
    mkdir --parents "$STATE_PATH"
    cp $COMMITABLE "$STATE_PATH"
    ln -s "$STATE_PATH" PARENT
    

    如何在批处理文件中实现这一点?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Matijs    16 年前

    干得好。这是我自己的剧本:

    set now=%date:~-4%-%date:~-10,2%-%date:~-7,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
    
    rem Before 10:00 o'clock a space is used, this makes it a zero.
    set now=%now: =0%
    
    xcopy . copydir-%now% /i
    

    警告:这使用的是美国日期格式。为了匹配不同的格式,您必须更改它。在我与荷兰和美国系统合作时,我个人使用以下代码:

    rem US date versus Dutch: test 5th char is /
    if "%date:~-5,1%"=="/" (
       rem Date format is mm/dd/yyyy
       set now=%date:~-4%-%date:~-10,2%-%date:~-7,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
    ) else (
       rem Date format is dd-mm-yyyy
       set now=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
    )
    
        2
  •  0
  •   Jeremy Meo    14 年前

    xcopy /exclude:$FILE 选项可用于指定包含要忽略的文件名的文件。我的一个朋友把脚本转换成这样的批处理:

    @echo off
    set thedate=%date:~0,2%-%date:~3,2%-%date:~6,4%
    md %thedate%
    echo STATES > excludefile.txt
    echo excludefile.txt >> excludefile.txt
    xcopy <root folder of directory structure> %thedate% /e /i /exclude:excludefile.txt
    del excludefile.txt
    
    推荐文章