Windows copy command return codes?

前端 未结 5 499
[愿得一人]
[愿得一人] 2020-12-15 16:43

I would like to test for the success/failure of a copy in a batch file, but I can\'t find any documentation on what if any errorlevel codes are returned. For example

<
相关标签:
5条回答
  • 2020-12-15 17:08

    I'd opt for xcopy in this case since the error levels are documented (see xcopy documentation, paraphrased below):

    Exit code  Description
    =========  ===========
        0      Files were copied without error.
        1      No files were found to copy.
        2      The user pressed CTRL+C to terminate xcopy.
        4      Initialization error occurred. There is not
               enough memory or disk space, or you entered
               an invalid drive name or invalid syntax on
               the command line.
        5      Disk write error occurred.
    

    In any case, xcopy is a far more powerful solution. The equivalent documentation for copy does not document the error levels.


    As an aside, you may want to rethink your use of the %errorlevel% variable. It has unexpected results, at least in some versions of Windows, if someone has explicitly done something silly like:

    set errorlevel=22
    

    In those cases, the actual variable will be used rather than grabbing the actual error level. The "normal" way of doing this is (in decreasing order since errorlevel is a "greater than or equal to" check):

    if errorlevel 2 (
        echo Copy x y failed due to reason 2
        exit /B
    
    )
    if errorlevel 1 (
        echo Copy x y failed due to reason 1
        exit /B
    )
    

    In addition, if you are running Win7 or Win Server 2008 or later, you should look into Robocopy, which is now the preferred mass-copy solution.

    0 讨论(0)
  • 2020-12-15 17:14

    I believe Copy only returns 0 for success or 1 for failure.

    XCopy has documented return codes:

    0 = Files were copied without error.
    1 = No files were found to copy.
    2 = The user pressed CTRL+C to terminate xcopy.
    4 = Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.
    5 = Disk write error occurred.

    0 讨论(0)
  • 2020-12-15 17:16

    There is also one point I would like to emphasize: xcopy as well as robocopy can only copy files, but they can't rename them.
    While looking at the original situation (copy x y, which looks like a rename to me), I have the impression that the copy command still is the only one suitable for this purpose.

    0 讨论(0)
  • 2020-12-15 17:22

    It might also be worth pointing out that xcopy doesn't always return the error code you expect.

    For example when trying to copy multiple files with a wildcard but there are no files to copy you expect a return error code of 1 ("No files were found to copy"), but it actually returns 0 ("Files were copied without error")

    C:\Users\wilson>mkdir bla
    
    C:\Users\wilson>mkdir blert
    
    C:\Users\wilson>xcopy bla\* blert\
    0 File(s) copied
    
    C:\Users\wilson>echo %ERRORLEVEL%
    0
    
    0 讨论(0)
  • 2020-12-15 17:31
    Error# Description 
    0 No error 
    1 Not owner 
    2 No such file or directory 
    3 Interrupted system call 
    4 I/O error 
    5 Bad file number 
    6 No more processes 
    7 Not enough core memory 
    8 Permission denied 
    9 Bad address 
    10 File exists 
    11 No such device 
    12 Not a directory 
    13 Is a directory 
    14 File table overflow 
    15 Too many open files 
    16 File too large 
    17 No space left on device 
    18 Directory not empty 
    999 Unmapped error (ABL default) 
    
    
    0 讨论(0)
提交回复
热议问题