Файл переменные bat: Переменные среды в CMD, BAT-файле — iTeron

Переменные среды в CMD, BAT-файле — iTeron

Бывает так, что написанный Вами BAT-файл работает на одном компьютере, но не работает на другом. Ошибка часто заключается в том, что были использованы прямые пути к файлам. Например батник для копирования всех текстовых файлов находящихся в папке windows на диске C

xcopy C:\windows\*.txt

Такой батник будет работать на любом компьютере, только если операционная система установлена на диск С, если ОС расположена на другом диске D,F,K,J и т.д., необходимо использовать переменную %WINDIR%

Такой батник будет работать на любом компьютере — без разницы на какой диск установлена ОС

xcopy %WINDIR%\*.txt

Переменные среды — текстовые переменные операционной системы, хранящие данные о ряде настроек системы. Используются переменные среды при копировании, перемещении, переименовании, удалении, создании файлов и папок других действий  в командной строке.

Список переменных среды ОС Windows Вы можете посмотреть введя в командной строке: set и нажав клавишу Enter Также можно вывести список переменных в текстовый файл с помощью батника

set > docent. txt

Bat-файл с таким кодом создаст текстовый файл docent.txt(здесь и далее имена подставляйте свои)и выведет список переменных среды ОС Windows в этот текстовый документ в том-же месте где и располагается запущенный батник.

Список  переменных сред

%ALLUSERSPROFILE%                     размещение профиля «All Users»

%APPDATA%                                  используемое по умолчанию размещение данных приложений

%CD%                                           путь к текущей папке

%CMDCMDLINE%                           строка команд, с помощью которой был запущен данный экземпляр Cmd.exe

%CMDEXTVERSION%                      номер версии текущих расширений обработчика команд

%COMPUTERNAME%                        имя компьютера

%COMSPEC%                                 путь к исполняемой командной оболочке

%DATE%                                        текущие данные, использует тот же формат, что и команда date /t

%ERRORLEVEL%                             код ошибки последней использовавшейся команды

%HOMEDRIVE%                              имя диска локальной рабочей станции

%HOMEPATH%                                полный путь к основному каталогу пользователя

%HOMESHARE%                              сетевой путь к общему основному каталогу пользователя

%LOGONSEVER%                            имя контроллера домена, который проверял подлинность текущей сессии

%NUMBER_OF_PROCESSORS%        количество процессоров, установленных на компьютере

%OS%                                           имя операционной системы

%PATHEXT%                                   список расширений файлов

%PROCESSOR_ARCHITECTURE%     архитектура процессора. Значения: x86, IA64

%PROCESSOR_IDENTFIER%            описание процессора

%PROCESSOR_LEVEL%                   номер модели процессора, установленного на компьютере

%PROCESSOR_REVISION%             номер модификации процессора

%ProgramFiles%                             путь к Program Files

%PROMPT%                                    параметры командной строки для текущего интерпретатора

%RANDOM%                                   произвольное десятичное число от 0 до 32767

%SYSTEMDRIVE%                           имя диска, содержащего корневой каталог

%SYSTEMROOT%                            размещение системного каталога Windows

%TIME%                                         текущее время

%USERDOMAIN%                            имя домена, содержащего список учетных записей пользователей

%USERNAME%                                имя пользователя, выполнившего вход в систему

%USERPROFILE%                            размещение профиля для текущего пользователя

%WINDIR%                                    размещение каталога операционной системы

Если Вы хотите посмотреть чему равна переменная среды на Вашем компьютере в командной строке(окно CMD), не забывайте прописывать впереди переменной «echo»

echo — команда  предназначенная для отображения строки текста

Например если Вы захотите узнать текущее время %TIME% и просто напишите %TIME% в CMD — то получите ошибку: «Синтаксическая ошибка в имени файла, имени папки или метке тома»

Если напишете echo %TIME% — то узнаете точное время

Батником вывести информацию в txt можно так

echo off

chcp 1251

echo сегодня %DATE% время %TIME% >> docent. txt

echo имя компьютера  %COMPUTERNAME% >> docent.txt

echo имя юзера %USERNAME% >> docent.txt

echo где Винда %WINDIR% >> docent.txt

echo и т.д. и т.п >> docent.txt

Использование переменной при удалении файлов и папок с помощью Bat файла

Удаление папки Docent которая находится на диске С в WINDOWS

RD С:\WINDOWS\Docent /S/Q

То-же самое, но удаляем папку  с помощью переменной %WINDIR%

RD %WINDIR%\Docent /S/Q

Использование переменной при перемещении файлов

Перемещение текстового файла docent.txt из папки WINDOWS на диске С в папку Program Files которая тоже на диске С

MOVE «C:\WINDOWS\docent.txt» «C:\Program Files»

То-же самое, но перемещаем с помощью переменных %WINDIR% и %ProgramFiles%

MOVE «%WINDIR%\docent.txt» «%ProgramFiles%»
скопировано с: http://docent777.ru/publ/ot_docenta/pro_batniki/peremennye_sredy_v_cmd_bat_fajle/1-1-0-29
источник: www. docent777.ru

(Всего просмотров: 33 288, просмотров сегодня: 11)

Переменные (Variable) на языке Batch

Сайт бесплатного изучения языков:

  • Английский
  • вьетнамский
  • Другие языки

Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи.

Facebook

1- Что такое переменная?

Переменная является базовым понятием в компьютерной науке, это значение, которое может меняться. Как и другие языки, Batch так же имеет понятие переменной.

В принципе Batch имеет 2 вида переменных:

  • Переменные объявлены в файле через команду set.
  • Переменная аргумента (Argument variable), передается (pass) снаружи когда файл вызывается для выполнения.

2- Распространенные переменные

Язык Batch не имеет ясное понятие о виде данных, обычно переменная имеет значение строки (string), включая символы после знака = до конца строки (Включая пробелы если есть).

Если вы хотите объявить переменную как число, вам нужно использовать команду set /A

Для получения доступа в значение переменной, вам нужно закрыть (enclosed) заключить ту переменную в скобках со знаками %.

Пример:

variableExample1.bat

@echo off 
set name=Tran
set /A age=  37
echo %name%
echo %age%
set info=My Name is: %name%, Age: %age%
echo %info%
pause

variableExample2.bat

@echo off
set /A a =  100
set /A b =  200
echo a = %a%
echo b = %b%
set /A sum = a + b
echo Sum = %sum%
pause

3- Переменные аргумента (Arguments variable)

Когда идет вызов для выполнения файла batch, вы можете передать (pass) значения в файл. Внутри файла вы можете получить доступ в эти значениячерез переменные %1, %2, %3,… Эти переменные так же называются переменными аргумента (Argument variables).

argumentVariables.bat

@echo off
@echo First argument is: %1
@echo Second argument is: %2
pause

Мы протестируем пример выше, открывая окно CMD, и CD к папке, содержащей файл argumentVariables. bat

Выполнить файл argumentVariables.bat с параметрами.

Результат:

4- Рамки переменной

Когда командное окно (Command Window) открывается, оно начнет сеанс работы (session). Тот сеанс работы завершится когда закроется командное окно. Во время сеанса работы вы можете выполнить один или много файлов batch. Переменные созданные в предыдущих файлах могут быть доступны в следующих файлах. Такие переменные называются глобальными переменными (Global Variable). Но вы можете создать локальную переменную (Local Variable), локальная переменная существует только в файле определяющей ее, или только существует в коде того файла.

Пример локальной переменной (Local Variables)

Локальные переменные (Local variable) объявлены в блоке, начинаются с setlocal и заканчиваются на endlocal.

localVariable.bat

@echo off
set global1=I am a global variable 1
setlocal
  set local1=I am a local variable 1
  set local2=I am a local variable 2
  echo ----- In Local Block! -----
  echo local1= %local1%
  echo local2= %local2%
endlocal
echo  . .
echo ----- Out of Local Block! -----
echo global1= %global1%
echo local1= %local1%
echo local2= %local2%
pause

Пример глобальной переменной (Global Variables):

Переменные объявлены в файле Batch, и не находятся в блоке команд setlocal .. endlocal, будут глобальными переменными. Они могут быть использованы в других файлах в одном и том же сеансе работы (Session).

В данном примере у нас есть 2 файла batchFile1.bat и batchFile2.bat. Переменная MY_ENVIRONMENT определяется в файле 1, и используется в файле 2.

batchFile1.bat

@echo off
set MY_ENVIRONMENT=C:/Programs/Abc;C:/Test/Abc

batchFile2.bat

@echo off
echo In batchFile2.bat 
echo MY_ENVIRONMENT=%MY_ENVIRONMENT%

Открыть окно CMD, и CD к папке содрежащей файл batchFile1.bat, batchFile2.bat, запустить поочередно каждый файл.

5- Переменные среды Windows

Windows позволяет вам создать переменные среды, данные переменные будут глобальными переменными, которые можно использовать в любых файлах batch.

В Windows выберите:

  • Start Menu/Control Panel/System
  • Advanced (Tab) > Environment Variables..

Здесь вы можете создать переменную среды для текущего user, или переменную среды системы (system environment variable), который можно использовать любым user.

Например, я создаю переменную среды с названием MY_ENVIRONMENT_VARIABLE и значением «My Environment Variable Value!».

И можно использовать только что созданную переменную среду в файле batch.

testEnvVariable.bat

@echo off
echo %MY_ENVIRONMENT_VARIABLE%
pause

Как передать переменные из одного пакетного файла в другой пакетный файл?

спросил

Изменено
1 месяц назад

Просмотрено
54к раз

Как написать пакетный файл, который получает входную переменную и отправляет ее в другой пакетный файл для обработки.

Пакет 1

Я не знаю, как отправить переменную в пакет 2, и это моя проблема.

Пакет 2

 if %variable%==1 перейти Пример
перейти :EOF
:Пример
эхо YaY
 
  • пакетный файл

4

Вам вообще ничего не нужно делать. Переменные, установленные в пакетном файле, видны в пакетном файле, который он вызывает.

Пример

 @echo off
установить х=7
вызов test2.bat
установить х=3
вызов test2.bat
Пауза
 
 эхо В test2.bat с x = %x%.
 

… при запуске test1.bat.

 В test2.bat с x = 7.
В test2.bat с x = 3.
Нажмите любую клавишу для продолжения . . .
 

0

Вы можете передать переменные batch2.bat в качестве аргументов в batch3.bat.

arg_batch2.bat

 @эхо выключено
клс
установить file_var1 = мир
установить file_var2 =% имя_компьютера%
вызвать arg_batch3. bat %file_var1% %file_var2%
:: Обратите внимание, что после запуска batch3.bat поток возвращается сюда, но поскольку
:: нечего больше запускать, код заканчивается, создавая видимость окончания
::batch3.bat является концом кода.
 

arg_batch3.bat

 @эхо выключено
:: Здесь действительно должна быть проверка ошибок, чтобы гарантировать
:: передана допустимая строка, но это всего лишь пример.
установить аргумент1=%~1
установить аргумент2=%~2
эхо Здравствуйте, %arg1%! Меня зовут %arg2%.
 

Если вам нужно запустить сценарии одновременно, вы можете использовать временный файл.

file_batch2.bat

 @эхо выключено
установить переменную = мир
:: Сохранить имя и значение переменной в форме var=value
:: > перезапишет любые существующие данные в args.txt, используйте >> для добавления в конец
эхо var1=мир>args.txt
эхо-переменная2=%ИМЯ_КОМПЬЮТЕРА%>>args.txt
вызвать file_batch3.bat
 

file_batch3.bat

 @эхо выключено
клс
:: Получить значение переменной из args. txt
:: Опять же, в идеале здесь должна быть некоторая проверка ошибок, но это пример
:: Не устанавливайте разделители, чтобы вся строка обрабатывалась сразу
для /f "delims=" %%A в (args.txt) сделать (
    установить %%A
)
эхо Здравствуйте, %var1%! Меня зовут %var2%.
 

Если вы читаете ответы и по-прежнему сталкиваетесь с проблемами, возможно, вы неправильно используете setlocal .

setlocal работает как пространство имен с endlocal закрытие последнего открытого пространства имен.

Если вы поместите endlocal в конец вашего вызываемого объекта, как я делал по умолчанию, ваша переменная будет потеряна в ранее открытом setlocal .

Пока ваша переменная установлена ​​в том же «локальном» месте, что и ваш файл вызывающего абонента, все будет в порядке.

Есть 2 способа. Один пишет в файл, а другой нет.
Все включают: setlocal EnableDelayedExpansion

Batch2: (.bat или .cmd)

 установить myvar1=x 1920
установить myvar2=y 1080
установить myvar > MyConfig. ini
REM (Используйте >> для добавления файла и сохранения существующих записей вместо перезаписи.)
 

Будет создан/добавлен файл MyConfig.ini, содержащий:

 myvar1=x 1920
myvar2=y 1080
 

Batch3:

 для /f "delims== tokens=1,2" %%I в (myconfig.ini) установить %%I=%%J
 

Затем для myvar1 и myvar2 будут установлены сохраненные значения.

Чтобы избежать хранения файлов на диске, попробуйте кое-что, что я придумал: 9& установить myvar2=y 1080

Пакет 3:

 для /f "tokens=*" %%G в ('gettitle.exe') сделать (установить titlenow=%%G)
%titlenow%
 

В результате Batch3 выполняет команды…

 set myvar1=x 1920& set myvar2=y 1080
 

…для репликации переменных из пакета 2.
Переменные могут быть изменены и возвращены в пакет 2 таким же образом.
Он идеально подходит для параллельной обработки приложений ИИ на суперкомпьютерах под управлением Windows 10! lol

gettitle.exe взят с http://www.robvanderwoude. com

Вы можете найти решение ниже —

 переменная идет сюда >> "второй файл идет сюда.bat"
 

Этот код записывает переменные во второй файл, если он существует. Даже если он не существует, он создает новый файл.

1

Зарегистрируйтесь или войдите

Зарегистрироваться через Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как прочитать содержимое файла в переменную в пакетном файле?

спросил

Изменено
1 год, 6 месяцев назад

Просмотрено
540 тысяч раз

Этот пакетный файл переводит сборку из TEST в LIVE. Я хочу добавить в этот файл проверочное ограничение, гарантирующее наличие сопутствующего документа о выпуске в определенной папке.

 "C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config
 

Итак, у меня есть пара вопросов о том, как этого добиться…

  1. В папке \\testserver\testapp$ есть файл version.txt , и единственным содержимым этого файла является номер сборки (например, 45 — для сборки 45)
    Как прочитать содержимое файл version.txt в переменную в командном файле?

  2. Как проверить, существует ли файл \\fileserver\myapp\releasedocs\ {build}.doc , используя переменную из части 1 вместо {build}?

  • пакетный файл

Прочитать содержимое файла в переменную:

 для /f "delims=" %%x в (version. txt) установить Build=%%x
 

или

 set /p Build=<версия.txt
 

Оба будут действовать одинаково только с одной строкой в ​​файле, для большего количества строк для варианта поместит последнюю строку в переменную, а set /p будет использовать первой.

Использование переменной — как и любой другой переменной среды — в конце концов, это одна:

 %Build%
 

Итак, чтобы проверить наличие:

 если существует \\fileserver\myapp\releasedocs\%Build%.doc ...
 

Хотя вполне может быть, что UNC-пути там не разрешены. Не могу проверить это прямо сейчас, но имейте это в виду.

12

Вы можете прочитать несколько переменных из файла следующим образом:

 for /f "delims== tokens=1,2" %%G в (param.txt) установить %%G=%%H
 

где param.txt:

 PARAM1=значение1
ПАРАМ2=значение2
...
 

4

просто сделайте:

 введите version.