有的時候,我們可能需要替換某些目錄下的一些文件,手動去一個個目錄找的話,就會比較麻煩,這時候,就是我們程序員上場的時候了,程序雖然好寫,但是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(),將命令輸入到里面就可以了,比如:
$cmd = "xcopy C:\info.txt D:\ /Y";
exec($cmd);
如果是同一目錄下,又該怎么寫呢, 這里舉個特殊例子,有一個名字叫做170tu的目錄,其實就是以數字開頭的目錄
$cmd = "xcopy .\a.txt .\170tu\ /Y";
exec($cmd);
170tu是程序當前目錄下的一個子目錄,執行之后,發現沒有任何變化,單拿出來這條命令,手動去執行,卻發現可以執行成功,哪里出錯了呢?
這是不妨打印一下
$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下用/表是地址分割符,這樣的區別也得留意