windows下如何使用DOS命令强制复制文件
有的时候,我们可能需要替换某些目录下的一些文件,手动去一个个目录找的话,就会比较麻烦,这时候,就是我们程序员上场的时候了,程序虽然好写,但是dos命令并不是每个人都玩的转的,而且最令人厌烦的事是Linux和Dos命令差别极大,Linux上一条cp -f A B的命令,DOS下可不简单。
下面介绍一下DOS复制文件的命令:
xcopy C:\info.txt D:\ /Y
取消提示以确认要覆盖现有目标文件。
其中 C:\info.txt
表示原文件,D:\
表示目标目录,/Y
表示一个可选择的参数,表示当我们在执行 xcopy C:\info.txt D:\
的时候,如果 D:\
下有同名文件,windows会询问你,是否要覆盖文件,这时候,我们输入Y就可以复制了,用命令行表示呢,就是在其后加上一个 /Y
的参数,以上这个命令就可以强制复制文件了,更详细的DOS拷贝命令,详见下面链接:
说完了DOS命令,再来谈谈,程序如何执行,这里拿PHP举例,毕竟是老本行
PHP执行命令有一个函数exec(),将命令输入到里面就可以了,比如:
<?php
$cmd = "xcopy C:\info.txt D:\ /Y";
exec($cmd);
如果是同一目录下,又该怎么写呢, 这里举个特殊例子,有一个名字叫做170tu的目录,其实就是以数字开头的目录
<?php
$cmd = "xcopy .\a.txt .\170tu\ /Y";
exec($cmd);
170tu是程序当前目录下的一个子目录,执行之后,发现没有任何变化,单拿出来这条命令,手动去执行,却发现可以执行成功,哪里出错了呢?
这是不妨打印一下
<?php
$cmd = "xcopy .\a.txt .\170tu\ /Y";
echo $cmd;
die; // 打个断点
exec($cmd);
输出结果如下:
xcopy .\a.txt .xtu\ /Y
你发现.\170变成了.x,如上 \
会按照ANSI编码表转义能转义的字符,因此上面的命令要换成以下:
$cmd = "xcopy .\\a.txt .\\170tu\\ /Y";
这样就不会出现转义的错误了,当然Linux下用/表是地址分割符,这样的区别也得留意
还没有任何评论,你来说两句吧