Dos命令完成文件拷貝


Dos命令初階--文件拷貝

 1、XCOPY命令

可以在cmd中錄入:XCOPY /? 即可查看幫助

幫助:

XCOPY


Microsoft Windows [版本 6.2.9200]
(c) 2012 Microsoft Corporation。保留所有權利。

C:\Users\Administrator>xcopy /?
復制文件和目錄樹。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
                           [/EXCLUDE:file1[+file2][+file3]...]

  source       指定要復制的文件。
  destination  指定新文件的位置和/或名稱。
  /A           僅復制有存檔屬性集的文件,
               但不更改屬性。
  /M           僅復制有存檔屬性集的文件,
               並關閉存檔屬性。
  /D:m-d-y     復制在指定日期或指定日期以后更改的文件。
               如果沒有提供日期,只復制那些
               源時間比目標時間新的文件。
  /EXCLUDE:file1[+file2][+file3]...
               指定含有字符串的文件列表。每個字符串
               在文件中應位於單獨的一行。如果任何
               字符串與復制文件的絕對路徑的任何部分相符,
               則排除復制該文件。例如,
               指定如 \obj\ 或 .obj 的字符串會分別
               排除目錄 obj 下面的所有文件或帶有
               .obj 擴展名的所有文件。
  /P           創建每個目標文件之前提示你。
  /S           復制目錄和子目錄,不包括空目錄。
  /E           復制目錄和子目錄,包括空目錄。
               與 /S /E 相同。可以用來修改 /T。
  /V           驗證每個新文件的大小。
  /W           提示你在復制前按鍵。
  /C           即使有錯誤,也繼續復制。
  /I           如果目標不存在,且要復制多個文件,
               則假定目標必須是目錄。
  /Q           復制時不顯示文件名。
  /F           復制時顯示完整的源文件名和目標文件名。
  /L           顯示要復制的文件。
  /G           允許將加密文件復制到
               不支持加密的目標。
  /H           也復制隱藏文件和系統文件。
  /R           覆蓋只讀文件。
  /T           創建目錄結構,但不復制文件。不
               包括空目錄或子目錄。/T /E 包括
               空目錄和子目錄。
  /U           只復制已經存在於目標中的文件。
  /K           復制屬性。一般的 Xcopy 會重置只讀屬性。
  /N           用生成的短名稱復制。
  /O           復制文件所有權和 ACL 信息。
  /X           復制文件審核設置(隱含 /O)/Y           取消提示以確認要覆蓋
               現有目標文件。
  /-Y          要提示以確認要覆蓋
               現有目標文件。
  /Z           在可重新啟動模式下復制網絡文件。
  /B           復制符號鏈接本身與鏈接目標。
  /J           復制時不使用緩沖的 I/O。推薦復制大文件時使用。

開關 /Y 可以預先在 COPYCMD 環境變量中設置。
這可能被命令行上的 /-Y 覆蓋。

C:\Users\Administrator>

 

認真讀懂這些參數,即可寫Copy命令了。

簡單的:

xcopy source target

下面介紹幾種常見用法:

1)拷貝文件

將C盤的info.txt文件拷貝到D盤根目錄。

xcopy C:\info.txt D:\

將命令保存到bat文件,然后在C盤創建info.txt,執行bat文件,即可在D盤看到。

2)指定參數,強制覆蓋

如果重復執行,因為文件已經存在,則會給出提示

我們加入強制執行參數:

xcopy C:\info.txt D:\  /Y

我們從上文的幫助中砍下其命令說明:

/Y           取消提示以確認要覆蓋
               現有目標文件。
/-Y          要提示以確認要覆蓋
               現有目標文件。

 然后,就可以重復執行,每次都會覆蓋。 

3)拷貝文件,只拷貝更新文件

每次都強制copy,如果源文件比目標目錄的文件,日期新,才copy怎么辦呢?

增加配置參數:D

xcopy C:\info.txt D:\  /Y/D

對應才參數說明:

/D:m-d-y     復制在指定日期或指定日期以后更改的文件。
               如果沒有提供日期,只復制那些
               源時間比目標時間新的文件。

4)拷貝目錄

其實與拷貝文件類似。

xcopy C:\test D:\test  /D/Y

如果D:\test文件夾不存在,則會自動創建。

在C盤的test文件中創建文件和文件夾,即可進行Copy。

第一次執行會出現提示:是文件還是目錄。

如何指定其為目錄,無需客戶判定呢?

解決辦法:默認是目錄:/I

xcopy C:\test D:\test2  /I/D/Y

其使用說明:

 /I           如果目標不存在,且要復制多個文件,
               則假定目標必須是目錄。

5)拷貝目錄中包含子目錄

根據上面的腳本,只能復制當前目錄下的文件及目錄

我們可以使用/S 或者/E

xcopy C:\test D:\test2  /E/I/D/Y

這樣,其C:\test下的所有文件,包括子目錄與空目錄,以及子目錄的子目錄文件,也都成功拷貝到了目標目錄。

/S與/E具體解釋:

 /S           復制目錄和子目錄,不包括空目錄。
  /E           復制目錄和子目錄,包括空目錄。
               與 /S /E 相同。可以用來修改 /T。

6)如果Copy只讀文件

當文件Copy到目標目錄,如果其是或者設置為只讀文件,則無法覆蓋。

這時我們用到了參數/R

xcopy C:\test D:\test  /E/R/I/D/Y

具體解釋:

/R           覆蓋只讀文件。

其他的命令參數,我們這里不再介紹,根據自己的需要,認真研究幫助文檔。

2、echo命令,增加描述

通過XCOPY命令,可以很輕松的實現copy功能。為了讓界面更友好,我們希望將執行的情況展現給用戶。

這時候就需要echo命令。

在cmd中輸入:echo /?查看幫助

C:\Users\Administrator>echo /?
顯示信息,或啟用或關閉命令回顯。

  ECHO [ON | OFF]
  ECHO [message]

要顯示當前回顯設置,鍵入不帶參數的 ECHO

 

幾種常見功能介紹:

1)輸出提示信息

格式:ECHO信息內容

echo HelloWorld

執行結果:

2)作為控制批處理命令在執行時是否顯示命令行自身的開關 

格式:ECHO [ON|OFF]
如果想關閉“ECHO OFF”命令行自身的顯示,則需要在該命令行前加上“@”。

在上圖中,我們可以看到前面總是有路徑信息,很煩,能否只展現dos命令執行信息呢?這就要用到ECHO OFF

@echo OFF
echo HelloWorld
pause

執行結果:

看到了,cmd窗口只剩下dos命令了。簡潔漂亮。

3)echo還有其他功能,如改變背景色、輸出文件等。這里不再介紹。

3、SET命令,設置變量

用戶錄入還需要給出具體的提示。

但是,我們希望將文件拷貝到用戶指定的目錄中去。

需要提供一個交互頁面,指導用戶進行操作。

這就需要dos的set命令。用來設置變量。

SET [variable=[string]] 

   variable   指定環境變量名。 
   string 指定要指派給變量的一系列字符串。 要顯示當前環境變量,鍵入不帶參數的 SET。 SET 命令不允許變量名含有等號。

但獲取變量時,用%variable%獲取

在cmd中可以輸入:SET /? 查看詳細幫助。

1)設置變量

例子:

@echo OFF
set name=Tom
echo %name%

 

2)給出輸入提示,則需要/p參數

SET /P variable=[promptString] 

看一個helloworld的例子

echo
set /p name=請輸入您的名字
echo Hello %name%,welcome to dos world.
pause

3)用set命令進行簡單計算  

語法:

SET /A expression 

 

/A 命令行開關指定等號右邊的字符串為被評估的數字表達式。該表達式評估器很簡單並以遞減的優先權順序支持下列操作。

例子:1+1=2

@echo OFF
set /p expresion=請輸入數學表達式
set /a result = %expresion%
echo %result%
pause

關於set可以進行計算的功能,還有很多詳細的內容,這里不再多說,可以查詢相關的資料。

4)set用於字符串處理

1)字符串替換

語法:

%var:str1=str2%  

含義:將字符串變量%var%中的str1替換為str2

 

例子:

@echo OFF
set var=堅持就是勝利
echo 替換前的值為:"%var%"
set var=%var:是=能%
echo 替換后的值為:%var%
pause

執行結果:

2)字符串截取

語法:

%var:~[m[,n]]% 

方括號表示可選,%為變量標識符,var為變量名,不可少,冒號用於分隔變量名和說明部分,符號~可以簡單理解為“偏移”即可,m為偏移量(缺省為0),n為截取長度(缺省為全部) %PATH:~10,5%   

例子:

@echo OFF
set var=堅持就是勝利
echo 截取前:%var%%
set var="%var:~0,2%"
echo 截取后:%var%
pause

結果:

截取長度可以為負數:

語法:

%var:~0,-2%

含義:把字符串倒數第三位開始的所有值付給變量。

負數,代表逆向。

@echo OFF
set var=堅持就是勝利
echo 截取前:%var%%
set var="%var:~0,-2%"
echo 截取后:%var%
pause

結果:

 

其實位置可以省略

語法:

%var:~-2%

含義:從變量var字符串,從末尾開始,截取2個字符。

@echo OFF
set var=堅持就是勝利
echo 截取前:%var%%
set var="%var:~-2%"
echo 截取后:%var%
pause

結果:

 

4、IF命令,判斷

 設置了路徑,我們需要判斷是否存在,通過IF語句

在cmd中輸入:IF /?  查看if語句的使用幫助。

執行批處理程序中的條件處理。

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               指定只有條件為 false 的情況下,Windows 才
                    應該執行該命令。

  ERRORLEVEL number 如果最后運行的程序返回一個等於或大於
                    指定數字的退出代碼,指定條件為 true。

  string1==string2  如果指定的文字字符串匹配,指定條件為 true。

  EXIST filename    如果指定的文件名存在,指定條件為 true。

  command           如果符合條件,指定要執行的命令。如果指定的
                    條件為 FALSE,命令后可跟 ELSE 命令,該命令將
                    在 ELSE 關鍵字之后執行該命令。

ELSE 子句必須出現在同一行上的 IF 之后。例如:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

由於 del 命令需要用新的一行終止,因此以下子句不會有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由於 ELSE 命令必須與 IF 命令的尾端在同一行上,以下子句也
不會有效:

    IF EXIST filename. del filename.
    ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

    IF EXIST filename. (del filename.) ELSE echo filename. missing

如果命令擴展被啟用,IF 會如下改變:

    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command

其中, compare-op 可以是:

    EQU - 等於
    NEQ - 不等於
    LSS - 小於
    LEQ - 小於或等於
    GTR - 大於
    GEQ - 大於或等於

而 /I 開關(如果指定)說明要進行的字符串比較不分大小寫。
/I 開關可以用於 IF 的 string1==string2 的形式上。這些
比較都是通用的;原因是,如果 string1 和 string2 都是
由數字組成的,字符串會被轉換成數字,進行數字比較。

CMDEXTVERSION 條件的作用跟 ERRORLEVEL 的一樣,除了它
是在跟與命令擴展有關聯的內部版本號比較。第一個版本
是 1。每次對命令擴展有相當大的增強時,版本號會增加一個。
命令擴展被停用時,CMDEXTVERSION 條件不是真的。

如果已定義環境變量,DEFINED 條件的作用跟 EXIST 的一樣,
除了它取得一個環境變量,返回的結果是 true。

如果沒有名為 ERRORLEVEL 的環境變量,%ERRORLEVEL%
會擴充為 ERROLEVEL 當前數值的字符串表達式;否則,你會得到
其數值。運行程序后,以下語句說明 ERRORLEVEL 的用法:

    goto answer%ERRORLEVEL%
    :answer0
    echo Program had return code 0
    :answer1
    echo Program had return code 1

你也可以使用以上的數字比較:

    IF %ERRORLEVEL% LEQ 1 goto okay

如果沒有名為 CMDCMDLINE 的環境變量,%CMDCMDLINE%
將在 CMD.EXE 進行任何處理前擴充為傳遞給 CMD.EXE 的原始
命令行;否則,你會得到其數值。

如果沒有名為 CMDEXTVERSION 的環境變量,
%CMDEXTVERSION% 會擴充為 CMDEXTVERSION 當前數值的
字串符表達式;否則,你會得到其數值。
IF幫助

 這里舉兩個簡單例子

1)判斷字符串

@echo OFF
SET /P var=是否繼續執行,請輸入Y或N
ECHO 輸入的值為:"%var%"
IF "%var%"=="Y" (
    echo 繼續執行...
)ELSE (
    echo 退出中...
)
    
pause

 2)判斷文件是否存在

@echo OFF
set /P var=請輸入文件名,包括文件路徑,如:C:\Info.txt
echo 輸入的值為:"%var%"
if exist %var%. (echo 文件存在. ) else echo 文件不存在.    
pause

備注:if與else在同一行中 

如果是分行處理,一定要保證括號附近有空格,否則會報語法錯誤,如下:

@echo OFF
set /P var=請輸入文件名,包括文件路徑,如:C:\Info.txt  
echo 輸入的值為:"%var%"
if exist %var% (
echo 文件存在
) else (
echo 文件不存在
)    
pause

執行結果:

5、goto語句,用於語句跳轉

如果對不同的情況,需要執行不同的既定操作,若還是按照常規的執行流程的話,是無法完成任務的,這個時候,就需要引入流程跳轉的概念,動用流程跳轉語句 goto 了。流程跳轉的含義是:改變默認的執行順序,強制跳轉到指定的位置執行特定的程序塊。 

  先來看個例子:假設需要判斷用戶輸入的是A還是B,代碼可以寫成這樣: 

@echo off 
set /p input=請輸入字母A或B: 
if "%input%"=="A" goto A 
if "%input%"=="B" goto B 
pause 
exit 

:A 
echo 您輸入的字母是A 
pause 
exit 

:B 
echo 您輸入的字母是B 
pause 
exit 

6、pause命令,暫停批處理程序

暫停批處理程序,並顯示以下消息:
請按任意鍵繼續. . . 

7、rem命令,注釋

為了bat腳本更好看,需添加注釋,就需要rem命令

語法:

REM [COMMENT]

在文件開頭寫說明性文字如:

REM 拷貝文件
REM CREATEBY YANK
REM 2014-08-25

 如果注釋多行,可以采取goto語句

goto Main
拷貝文件
CREATEBY YANK
2014-08-25
:Main

 最后的拷貝腳本如下:

goto MAIN
拷貝文件
CREATEBY YANK
2014-08-25
:MAIN

@echo off
echo "Copy start"

echo 請輸入需要拷貝的目標路徑
echo 請輸入target的路徑,如:D:\target
:SETTARGET
set /p target=請輸入target的路徑:
if "%target%"=="" (
    echo 未輸入target的路徑
    echo 補丁文件安裝失敗
    echo 退出...
    pause
    goto QUIT
)
if not exist "%target%" (
    echo 輸入的target地址不存在,請檢查后重新輸入
    goto SETTARGET
) else (
    xcopy C:\test %target%  /E/R/I/D/Y
)

:QUIT

 

其他 

1、bat執行,漢字出現亂碼

找了很多,最終,將bat文件用記事本打開,另存為ANSI格式即可。之前是UTF-8。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM