批处理文件检查目录是否存在,然后使用备用目录进行文件复制

时间:2013-07-10 22:37:31

标签: if-statement batch-file directory copy errorlevel

我正在尝试编写一个批处理文件,将exe文件从网络位置复制到本地位置。它目前有效,但根据Windows版本(xp或win7),用户必须选择正确的.bat文件,因为副本需要不同的本地路径。 (他们每次用户启动机器时都会运行启动文件夹)。这是我第一次使用编写批处理文件,在查看if语句的语法时完全丢失了。如果我能得到一些帮助来解决这个问题,那就太棒了。

以下是我目前适用于XP的内容:

    REM @ECHO OFF

    ECHO STARTING MOVEFILES

    SET EXITRC=0
    SET EXITMSG=EXITRC INITIALIZED
    ECHO %EXITRC% -- %EXITMS

    COPY "\\networkDrive\install\Individual\program\MOVEFILES.EXE" "C:\DOCUMENTS AND SETTINGS\ALL USERS\START MENU\PROGRAMS\STARTUP\"

    ECHO COPIED FILES TO YOUR PC  
    SET EXITRC=%ERRORLEVEL%
    IF NOT %EXITRC% == 0 GOTO :EXIT

    SET EXITMSG=PROCESSING COMPLETE

    :EXIT 
    ECHO STEP: %EXITMSG%  RC: %EXITRC%
    ECHO FINISHING MOVEFILES 
    PAUSE

    EXIT %EXITRC%

以下是我对Windows 7的看法:

    @ECHO OFF

    ECHO STARTING MOVEFILESWIN7

    SET EXITRC=0
    SET EXITMSG=EXITRC INITIALIZED
    ECHO %EXITRC% -- %EXITMS

    COPY "\\networkDrive\install\Individual\program\MOVEFILES.exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

    ECHO COPIED MOVEFILESWIN7 TO YOUR PC - All Users / Public Startup folder
    SET EXITRC=%ERRORLEVEL%
    IF NOT %EXITRC% == 0 GOTO :EXIT

    SET EXITMSG=PROCESSING COMPLETE

    :EXIT 
    ECHO STEP: %EXITMSG%  RC: %EXITRC%
    ECHO FINISHING MOVEFILESWIN7 

    PAUSE
    EXIT %EXITRC%

我希望只有一个批处理文件可以涵盖这两种方案,因此用户不会混淆要运行哪个批处理文件。

1 个答案:

答案 0 :(得分:4)

您可以使用环境变量%ALLUSERSPROFILE%

在WinXP上,默认为 C:\ Documents and Settings \ All Users

在Win7 / 2008上,默认为 C:\ ProgramData

此处有一个表格:http://ss64.com/nt/syntax-variables.html

我看到你也复制了一个不同的文件。不知道你为什么那样做。也许你可以在这里使用一种方法来检测:https://stackoverflow.com/a/2788764/1553090 - 否则你应该利用%ProgramFiles%%ProgramFiles(x86)%变量。

只是详细说明如何选择使用这些变量...您可以测试Win7启动文件夹是否存在,如果不存在则只回退到XP(无论它是否存在)。

set STARTUP_WIN7=%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Startup
set STARTUP_WINXP=%ALLUSERSPROFILE%\Start Menu\Programs\Startup

if EXIST "%STARTUP_WIN7%" (
    set STARTUP=%STARTUP_WIN7%
) else (
    set STARTUP=%STARTUP_WINXP%
)