3

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

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

4

1 回答 1

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%and%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%
)
于 2013-07-10T22:45:07.960 回答