2013-07-10 4 views
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% 

Я хотел бы иметь только один пакетный файл, который будет охватывать оба сценария, поэтому нет путаницы с пользователем, для которого запускается командный файл.

+1

Кстати, это * heaps * более легкое чтение командных скриптов, если вы используете нижний регистр. Сценарии не чувствительны к регистру, поэтому все в порядке. Просто используйте all-caps для переменных среды или других ключевых слов, таких как 'NOT'. – paddy

+0

приятно знать !! Благодаря! Я изменил это в своем коде прямо сейчас. Я все еще пытаюсь выяснить, как поместить копии в оператор if. Например: IF (каталог win7 существует) копировать в каталог win7; else скопируйте в каталог XP. Или что-то вдоль этих линий. – SteveAnselment

+2

Почему это происходит? Если вы найдете этот вопрос полезным, пожалуйста, пожалуйста, проголосуйте, но не голосуйте, не оставляя комментариев или предложений об улучшении. Это неконструктивно. – SteveAnselment

ответ

4

Вы можете использовать переменную окружения %ALLUSERSPROFILE%.

На WinXP по умолчанию C: \ Documents и 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% 
) 
+0

Благодарим за отзыв. Я не пытаюсь понять, где копировать ... Я уже знаю, куда им нужно идти. Я пытаюсь выяснить условное утверждение, которое определит, какой путь использовать в зависимости от того, существует ли путь к каталогу или, возможно, OSVersion (не уверены, возможно ли позже из пакета). Например: IF (каталог win7 существует) копировать в каталог win7; else скопируйте в каталог XP. Или что-то в этом направлении – SteveAnselment

+0

Также% ALLUSERSPROFILE% не помогает мне. Путь к файлу после его по-прежнему отличается от того, чтобы попасть в папку автозагрузки. – SteveAnselment

+1

Это должно помочь, вам просто нужен дополнительный толчок. Я отредактировал свой ответ, чтобы показать один из способов его использования. Вы можете делать вариации на эту тему, в зависимости от того, насколько вы хотите быть педантичным. знак равно – paddy

 Смежные вопросы

  • Нет связанных вопросов^_^