If statement 批处理文件以检查目录是否存在(若不存在),然后使用备用目录进行文件复制

If statement 批处理文件以检查目录是否存在(若不存在),然后使用备用目录进行文件复制,if-statement,batch-file,directory,copy,errorlevel,If Statement,Batch File,Directory,Copy,Errorlevel,我正在尝试编写一个批处理文件,将exe文件从网络位置复制到本地位置。它目前可以工作,但取决于windows xp或win7版本,由于副本需要不同的本地路径,用户必须选择正确的.bat文件。每次用户启动机器时,它们都会转到要运行的启动文件夹。这是我第一次编写批处理文件,在查看if语句的语法时,我完全不知所措。如果我能得到一些帮助来解决这个问题,那就太好了 以下是我目前拥有的适用于XP的功能: REM @ECHO OFF ECHO STARTING MOVEFILES S

我正在尝试编写一个批处理文件,将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%

我希望只有一个批处理文件将涵盖这两种情况,这样用户就不会混淆要在哪个批处理文件上运行

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

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

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

这里有一张桌子:

我看到你也复制了一个不同的文件。不知道你为什么这么做。也许您可以在此处使用方法进行检测:-否则,也许您应该利用%ProgramFiles%和%ProgramFilesx86%变量

只是为了详细说明您可能如何选择使用这些变量。。。您可以测试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%
)

顺便说一句,如果使用小写,读取批处理脚本会更容易。脚本不区分大小写,所以没关系。只需对环境变量或其他关键字使用所有大写字母,如NOT.good know!!谢谢我现在就在代码中更改它。我仍在试图找出如何将copy语句放入if语句中。例如:如果win7目录存在,复制到win7目录;否则复制到XP目录。或者类似的东西。为什么这会被否决?如果你觉得这个问题有帮助,请向上投票,但不要在不留下评论或改进建议的情况下否决。这是非建设性的。谢谢你的回复。我不是想知道在哪里复制。。。我已经知道他们要去哪里了。我试图找出一个条件语句,它将根据目录路径是否存在或者OSVersion不确定是否可以从批处理中使用后者来确定使用哪个路径。例如:如果win7目录存在,复制到win7目录;否则复制到XP目录。或者类似的东西所以%ALLUSERSPROFILE%对我没有帮助。到达启动文件夹后的文件路径仍然不同。这应该会有所帮助,您只需要额外的推送。我已经编辑了我的答案,以显示您可以使用它的一种方式。你可以在这个主题上做一些变化,这取决于你想学究的程度=