目标功能: 将2个文件夹合并为一个文件夹,这个合并后的文件夹以系统日期来命名。
废话少说,直接上代码:
::set newfile=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
:: get current path and date, save to newfile.
set newfile="%~dp0%date:~0,10%"
:: create a new dir, by newfile.
mkdir %newfile%
:: copy the first dir to our dir.
xcopy %1 %newfile% /E /Y
:: copy the second dir to our dir.
xcopy %2 %newfile% /E /Y
:: copy the third dir to our dir.
::xcopy %3 c:\%date:~0,10% /E < all
其中:
( :: 这个代表注释,在程序运行期间,无任何作用)
第一行: set newfile="%~dp0%date:~0,10%"
%~dp0 用于取得我们的可执行文件的对应具体的绝对路径。
%date:~0,10 用于取得XP系统的日期。
%newfile%: 就是我们用上面2个参数组合成的新文件名。
我们这里声明了一个变量 newfile 用于保存这个文件名,以便我们后期将别的文件内容全部拷贝进来。
第二行: mkdir %newfile%
根据%newfile%, 来创建一个新的文件夹。(位置在可执行程序的当前目录)
第三行: xcopy %1 %newfile% /E /Y
%1 代表给我们这个程序传入的第一个参数。
/E 指明,我们即将拷贝的是整个目录,包括子文件夹的所有文件,但是不包含隐藏文件。
/Y 指明,在拷贝的过程中,无需询问是否覆盖,免去交互应答烦恼。
xcopy 拷贝函数: [指令] [原文件位置] [目标文件位置] [参数选项]
本条指令,是将 %1 里面的所有文件拷贝到 %newfile% 文件夹内。
第四行: xcopy %2 %newfile% /E /Y
%2 代表给我们这个程序传入的第二个参数。
本条指令,是将 %2 里面的所有文件拷贝到 %newfile% 文件夹内。
程序用记事本编辑好之后,将后缀名修改为".bat" 就可以执行了。
后期发现,这个程序在XP系统下运行的很好,但在Win7下执行,创建文件夹时会出点意外。
运行后居然建立了3个父子文件夹,一个是2012,进去后是11,再进去是12.
解决方案为:
将第一行取得系统时间的参数改动一下: %date:~0,4%-%date:~5,2%-%date:~8,2%%date:~10,5%
即有如下代码:
::set newfile=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
:: get current path and date, save to newfile.
:: set newfile="%~dp0%date:~0,10%"
set newfile="%~dp0%date:~0,4%-%date:~5,2%-%date:~8,2%%date:~10,5%"
:: create a new dir, by newfile.
mkdir %newfile%
:: copy the first dir to our dir.
xcopy %1 %newfile% /E /Y
:: copy the second dir to our dir.
xcopy %2 %newfile% /E /Y
:: copy the third dir to our dir.
::xcopy %3 c:\%date:~0,10% /E < all
OK , 这是我第一次使用Windows的批处理来解决一些问题。