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

时间:2010-03-04 14:26:30

标签: windows batch-file

我正在编写一个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 个答案:

答案 0 :(得分:1)

你走了。这来自我自己的脚本:

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%
)

答案 1 :(得分:0)

xcopy的{​​{1}}选项可用于指定包含要忽略的文件名的文件。我的一个朋友将脚本转换为批处理,如下所示:

/exclude:$FILE