Cmd 변수 입력. 환경 변수

변수는 Cmd.exe 환경을 설정합니다. 이는 명령 셸의 동작뿐만 아니라 OS 자체도 규정합니다. 변수는 시스템과 로컬이라는 고유한 속성을 갖는 두 가지 유형으로 나누어야 합니다. 첫 번째 유형을 사용하면 작업 중 전역 OS 환경의 동작을 설정할 수 있습니다. 지역 변수는 환경의 활동을 Cmd.exe의 특정 인스턴스로만 설정합니다. 이는 주요 차이점으로 언급되어야 합니다.

시스템 변수에 대한 그의 이야기는 시스템 변수가 OS에 사전 설치되어 있으며 모든 응용 프로그램에서 사용할 수 있다는 것입니다. 이를 변경하려면 관리자 액세스 권한이 있어야 합니다. 가장 일반적인 응용 프로그램은 시스템 시작 작업을 제공하는 것입니다. 특정 사용자를 대상으로 이러한 이벤트가 수행될 때 지역 변수를 사용할 가능성에 대해 이야기할 수 있습니다.

다음은 우선순위의 중요도에 따른 기존 변수 클래스 목록입니다(내림차순).

  • 내장 시스템. 작업 과정에서 특별한주의가 필요한 가장 심각한 문제라고해야합니다.
  • HKEY_LOCAL_MACHINE과 관련된 시스템 뷰 변수입니다.
  • HKEY_CURRENT_USER와 관련된 로컬 뷰 변수입니다.
  • Autoexec.bat 문서에 있는 변수 및 환경의 전체 목록입니다.
  • 시스템 시작 스크립트에 있는 변수 및 환경의 전체 목록입니다. 특정 상황에서는 존재하지 않을 수도 있습니다.
  • 작성된 스크립트 또는 배치 문서에 대해 대화형으로 적용되는 변수입니다.

로컬 또는 시스템 범주에 속하는 변수 목록은 꽤 많습니다. 이 문제에 더 많은 관심을 기울일 필요가 있습니다.

지역 변수

이름 정보

%ALLUSERSPROFILE%

모든 사용자 프로필이 정확히 어디에 있는지에 대한 정보를 제공합니다.

프로그램의 기본 위치를 제공합니다

사용 중인 폴더의 경로를 얻을 수 있습니다.

Cmd.exe의 현재 인스턴스를 실행하는 데 사용되는 명령줄을 제공합니다.

지정된 세션을 인증하는 도메인 컨트롤러의 이름을 제공합니다.

현재 인터프리터에 대한 KA 매개변수를 제공할 수 있습니다. 액세스하려면 Cmd.exe를 사용해야 합니다.

사용자 계정 목록이 있는 도메인의 이름을 제공합니다.

로그인한 사용자의 이름을 제공합니다.

현재 사용자의 계정 위치를 반환합니다.

시스템 변수

현재 명령 프로세서 확장의 버전 번호를 제공할 수 있습니다.

작업이 수행되는 장치의 이름을 제공합니다.

실행 가능한 명령 셸의 경로를 반환합니다.

유효한 정보를 제공합니다. date /t와 유사한 형식을 사용하도록 되어 있다는 점에 유의해야 합니다. 지정된 명령에 대한 모든 정보는 사이트의 해당 섹션에서 직접 얻을 수 있습니다.

마지막으로 사용한 명령의 오류 코드를 제공하는 데 사용됩니다. 표준 상황에는 0이 아닌 값이 존재하는 경우가 있습니다.

사용자 디렉터리와 연결된 워크스테이션 디스크의 이름을 제공합니다. 기본 디렉터리 위치에 따라 설치 필수

사용자의 기본 디렉터리에 대한 경로를 제공합니다. 메인 디렉터리의 위치 정보를 기반으로 설치해야 함

사용자의 공통 기본 디렉터리에 대한 경로를 제공합니다. 메인 디렉터리의 위치 정보를 기반으로 설치해야 함

%NUMBER_OF_PROCESSORS%

특정 장치에 있는 프로세서 수를 결정합니다.

특정 장치에서 OS의 이름에 대한 정보를 전송합니다. 일부 유형의 OS에는 이름을 표시하는 특정 기능이 있으며 이를 고려해야 합니다.

프로그램 탐지를 위한 검색 경로를 설정합니다.

OS에서 실행 가능한 것으로 간주하는 문서 확장자 목록을 제공합니다.

%PROCESSOR_ARCHITECTURE%

특정 프로세서의 아키텍처를 확보해야 하는 경우에 사용됩니다.

%PROCESSOR_IDENTFIER%

프로세서에 대한 간략한 정보를 제공합니다.

%PROCESSOR_LEVEL%

프로세서 개정 번호에 대한 정보를 제공합니다.

0~32767 범위의 정수를 제공합니다.

Windows XP의 루트 디렉터리가 기록된 디스크 이름을 제공합니다.

OS 시스템 디렉터리의 위치를 ​​제공합니다.

이러한 변수는 시스템과 사용자입니다. 이를 통해 다양한 상황에서 동일한 작업을 수행할 수 있습니다. 모든 사용자가 사용할 수 있는 임시 폴더를 제공합니다. 특정 프로그램의 경우 TEMP 또는 TMP를 사용해야 합니다.

현재 시간에 대한 정보를 제공합니다. 시간 /t와 유사한 표시 형식이 사용됩니다.

OS 디렉터리를 반환할 수 있습니다.

환경 변수 설정

환경 변수를 생성, 삭제 또는 노출하려면 특수 set 명령을 사용해야 합니다. 독특한 특징은 운영 쉘 환경에서만 변수를 조정한다는 것입니다.

특정 변수를 발행하기 위해 KS에 작성하는 것이 제공됩니다.

변수 이름 설정

다른 변수를 추가하려면 다음을 작성하면 됩니다.

변수 이름=값 설정

삭제 절차를 수행하려면 다음 줄을 작성해야 합니다.

변수 이름 설정=

시스템은 대부분의 기존 기호를 값으로 사용하도록 지정합니다. Prodel도 여기에 포함될 수 있습니다. 특정 문자를 사용하려면 먼저 (^)를 입력하거나 따옴표로 묶어야 합니다. 그렇지 않으면 잘못된 실행이나 오류가 발생할 수 있습니다. 몇 가지 간단한 예를 살펴봐야 합니다. 새로운&name 변수를 생성해야 한다고 가정해 보겠습니다. 작업을 수행하기 위해 CS에 다음이 입력됩니다.

varname=new^&이름 설정

특수 문자(^)를 사용하지 않으려고 노력할 수도 있지만 불가능합니다. 그 이유는 계속해서 같은 오류가 발생하기 때문입니다.

변수를 설정할 때 대문자나 소문자를 사용하는 것은 중요하지 않습니다. 사례는 고려되지 않습니다. 한 가지 독특한 특징이 있습니다. 즉, 변수는 입력된 그대로 정확하게 표시된다는 것입니다. 이렇게 하면 이름을 쓸 때 구별하기 위해 다른 레지스터를 사용하는 경우 더 쉽게 인식할 수 있습니다.

환경 변수로 대체

CS나 스크립트에서 직접 특정 값을 환경 변수로 대체하는 방법이 있습니다. 이 작업을 수행하려면 백분율 기호를 사용하는 것이 좋습니다. 다음과 같습니다.

%변수_이름%

Cmd.exe가 특정 변수의 값에 직접 접근해야 한다는 사실을 알리기 위한 것입니다. 문자별 비교 절차는 수행되지 않습니다. 대체 자체가 재귀적인 것으로 간주되지 않는다는 사실을 고려하는 것이 중요합니다. 점검은 한 번만 수행됩니다.

Cmd.exe의 셸 환경은 셸 및 운영 체제의 동작을 제어하는 ​​변수로 정의됩니다. 두 가지 유형의 환경 변수(시스템 및 로컬)를 사용하여 쉘 환경 또는 전체 운영 체제 환경의 동작을 정의할 수 있습니다. 시스템 환경 변수는 운영 체제의 전역 환경 동작을 정의합니다. 로컬 환경 변수는 지정된 Cmd.exe 인스턴스의 환경 동작을 제어합니다.

시스템 환경 변수는 운영 체제에 미리 정의되어 있으며 모든 Windows XP 프로세스에서 사용할 수 있습니다. 관리 권한이 있는 사용자만 이러한 변수를 변경할 수 있습니다. 이러한 변수는 로그인 스크립트에서 가장 일반적으로 사용됩니다.

로컬 환경 변수는 생성된 사용자가 로그인한 경우에만 사용할 수 있습니다. 하이브의 지역 변수 HKEY_CURRENT_USER현재 사용자에게만 유효하지만 글로벌 운영 체제 환경의 동작을 정의합니다.

다음 목록은 다양한 유형의 변수를 우선순위 내림차순으로 나타냅니다.

  1. 내장 시스템 변수
  2. 하이브 시스템 변수 HKEY_LOCAL_MACHINE
  3. 하이브 지역 변수 HKEY_CURRENT_USER
  4. 모든 환경 변수와 경로는 Autoexec.bat 파일에 지정됩니다.
  5. 모든 환경 변수와 경로는 로그인 스크립트(있는 경우)에 지정됩니다.
  6. 스크립트 또는 배치 파일에서 대화형으로 사용되는 변수

명령 셸에서 Cmd.exe의 각 인스턴스는 상위 응용 프로그램의 환경을 상속합니다. 따라서 상위 응용 프로그램 환경에 영향을 주지 않고 새 Cmd.exe 환경에서 변수를 변경할 수 있습니다.

다음 표에는 Windows XP의 시스템 및 로컬 환경 변수 목록이 나와 있습니다.

변하기 쉬운

설명

%ALLUSERSPROFILE%

현지의

"모든 사용자" 프로필의 위치를 ​​반환합니다.

현지의

애플리케이션 데이터의 기본 위치를 반환합니다.

현지의

현재 폴더의 경로를 반환합니다.

현지의

이 Cmd.exe 인스턴스를 시작하는 데 사용된 명령 문자열을 반환합니다.

체계

현재 명령 프로세서 확장의 버전 번호를 반환합니다.

체계

컴퓨터 이름을 반환합니다.

체계

실행 중인 명령 셸의 경로를 반환합니다.

체계

현재 데이터를 반환합니다. 명령과 동일한 형식을 사용합니다. 날짜/t. Cmd.exe 명령으로 생성됩니다.

체계

마지막으로 사용한 명령의 오류 코드를 반환합니다. 0이 아닌 값은 일반적으로 오류를 나타냅니다.

체계

사용자의 홈 디렉터리와 연결된 로컬 워크스테이션 드라이브의 이름을 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.

체계

사용자의 홈 디렉터리에 대한 전체 경로를 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.

체계

사용자의 공유 홈 디렉터리에 대한 네트워크 경로를 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.

현지의

현재 세션을 인증한 도메인 컨트롤러의 이름을 반환합니다.

%NUMBER_OF_PROCESSORS%

체계

컴퓨터에 설치된 프로세서 수를 지정합니다.

체계

운영 체제 이름을 반환합니다. Windows 2000을 사용하는 경우 운영 체제 이름은 Windows_NT로 나타납니다.

체계

실행 파일의 검색 경로를 지정합니다.

체계

운영 체제에서 실행 가능한 것으로 간주되는 파일 확장자 목록을 반환합니다.

%PROCESSOR_ARCHITECTURE%

체계

프로세서 아키텍처를 반환합니다. 값: x86, IA64.

%PROCESSOR_IDENTFIER%

체계

프로세서에 대한 설명을 반환합니다.

%PROCESSOR_LEVEL%

체계

컴퓨터에 설치된 프로세서의 모델 번호를 반환합니다.

%PROCESSOR_REVISION%

체계

프로세서 개정 번호를 반환합니다.

현지의

현재 인터프리터에 대한 명령줄 옵션을 반환합니다. Cmd.exe 명령으로 생성됩니다.

체계

0부터 32767까지의 임의의 10진수를 반환합니다. Cmd.exe 명령으로 생성됩니다.

체계

Windows XP 루트 디렉터리(즉, 시스템 디렉터리)가 포함된 드라이브의 이름을 반환합니다.

체계

Windows XP 시스템 디렉터리의 위치를 ​​반환합니다.

시스템 및 사용자

로그인한 사용자가 액세스할 수 있는 애플리케이션에서 사용하는 기본 임시 폴더를 반환합니다. 일부 응용 프로그램에는 TEMP 변수가 필요하고 다른 응용 프로그램에는 TMP 변수가 필요합니다.

체계

현재 시간을 반환합니다. 명령과 동일한 형식을 사용합니다. 시간/t. Cmd.exe 명령으로 생성됩니다.

현지의

사용자 계정 목록이 포함된 도메인의 이름을 반환합니다.

현지의

로그인한 사용자의 이름을 반환합니다.

현지의

현재 사용자의 프로필 배치를 반환합니다.

체계

운영 체제 디렉터리의 위치를 ​​반환합니다.

(명령) 파일을 사용하면 디렉터리에 대한 절대 경로를 지정하지 않고도 작업을 수행할 수 있습니다. 예를 들어 시스템 드라이브 문자를 미리 모르는 경우 항상 변수를 사용할 수 있습니다 %시스템드라이브%, OS가 설치된 드라이브 문자를 반환합니다. 또한 변수는 코드를 최적화하는 데 사용됩니다. 반복적으로 반복되는 매개변수(예: 레지스트리 키)에 짧은 변수를 할당하여 사용할 수 있습니다. 이 문서에서는 변수 작업을 위한 다양한 기술과 새 변수를 변경하고 생성하는 방법을 자세히 설명합니다. 이제 모든 것에 대해 순서대로 이야기합시다.

환경변수 분류
Windows 도움말에서는 두 가지 유형의 환경 변수인 시스템과 로컬을 구분합니다. 시스템 변수는 모든 사용자에 대해 동일한 값을 반환합니다. 예: %시스템드라이브%- 시스템 드라이브의 문자로, 모든 사용자에게 동일합니다. 하지만 로컬 변수가 반환하는 값은 로그인한 사용자에 따라 달라집니다. 예를 들어, %유저 프로필% C:\Documents and Settings\CurrentUser를 반환할 수 있습니다. 여기서 CurrentUser는 사용자 계정의 이름입니다.

이 명령은 운영 체제에서 사용할 수 있는 환경 변수와 현재 할당된 값을 찾는 데 도움이 됩니다. 세트, 매개변수 없이 명령줄에서 실행됨( 시작 – 실행 – cmd – 설정). 이 기사에서는 다양한 폴더(디렉토리)에 대한 경로를 나타내는 변수에 관심이 있습니다. 아래에서는 그 중 일부에 대해 좀 더 자세히 설명합니다.

변수|유형|설명
%SYSTEMDRIVE%|시스템|Windows XP/2003 운영 체제의 루트 디렉터리(즉, 시스템 루트 디렉터리)가 포함된 드라이브의 이름을 반환합니다.
%SYSTEMROOT%, %WINDIR%|System|Windows /2003 운영 체제의 루트 디렉터리 위치를 반환합니다.
%PATH%|System|실행 파일의 검색 경로를 지정합니다.
%PROGRAMFILES%|System|프로그램 설치 디렉터리(Program Files)에 대한 경로를 나타냅니다.
%COMMONPROGRAMFILES%|System|공용 프로그램 디렉터리(Program Files\Common Files)에 대한 경로를 나타냅니다.
%TEMP% 및 %TMP%|시스템 및 사용자|로그인한 사용자가 액세스할 수 있는 응용 프로그램에서 사용하는 기본 임시 폴더를 반환합니다. 일부 응용 프로그램에는 TEMP 변수가 필요하고 다른 응용 프로그램에는 TMP 변수가 필요합니다.
%USERPROFILE%|Local|현재 사용자의 프로필 위치를 반환합니다.
%ALLUSERSPROFILE%|Local|"모든 사용자" 프로필의 위치를 ​​반환합니다.
%CD%|Local|현재 폴더의 경로를 반환합니다.
%APPDATA%|Local|응용 프로그램 데이터의 기본 위치를 반환합니다.

배치 파일에서 변수 사용
간단한 예부터 시작해 보겠습니다.

명령/배치:

DEL /F /Q "%AllUsersProfile%\주 메뉴\Windows Activation.lnk" DEL /F /Q "%AllUsersProfile%\주 메뉴\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr "

이 예에서는 변수를 사용하여 시작 메뉴에 나타나는 위의 바로 가기를 제거합니다. %AllUsers프로필%, 변수를 사용하여 Windows\system32 디렉터리에서 SCR 확장자를 가진 모든 파일 %시스템루트%. 아시다시피 DEL /F /Q 대신 복사 명령 COPY부터 필요한 경우 모든 명령줄 매개 변수와 함께 필요한 응용 프로그램 설치를 시작하는 명령까지 무엇이든 있을 수 있습니다.

모든 명령에서 특별히 "따옴표"를 사용했습니다. 이는 우연이 아닙니다. 공백이 포함된 경로를 사용하는 경우 변수를 포함한 전체 경로를 따옴표로 묶어야 합니다. 변수 자체에 따옴표가 포함되어 있지 않더라도 시스템에서 구문 분석한 후 경로에 공백이 나타날 수 있습니다(예: %프로그램 파일% C:\Program Files에 있음). 어떤 경우든 따옴표를 사용하는 것이 더 좋습니다. 이는 명령 파일을 디자인할 때 좋은 습관입니다.

변수를 설정하는 방법

위의 예에서는 이미 존재하는 환경 변수를 사용했습니다. 그리고 아마도 변수 이름 주위에 백분율 기호가 있음을 눈치챘을 것입니다. 이러한 문자는 명령줄이나 배치 파일에서 변수 대체를 허용하는 데 필요합니다. 백분율 기호는 Cmd.exe가 문자별 비교를 수행하는 대신 변수 값에 액세스해야 함을 나타냅니다. 아래에서 어떻게 작동하는지 볼 수 있습니다. SET 명령을 사용하여 배치 파일에서 변수를 설정할 수 있습니다.

SET 명령
동일한 SET 명령을 사용하여 배치 파일에서 변수를 설정할 수 있습니다.

변수를 추가하려면 명령줄에 다음을 입력합니다.

암호:

변수 이름=값 설정

변수를 표시하려면 명령줄에 다음을 입력합니다.

암호:

변수 이름 설정

변수를 제거하려면 명령줄에 다음을 입력합니다.

암호:

변수 이름 설정=

예를 들어,

암호:

SET mydir=D:\파일\작업

변수를 설정하다 마이디르, 지정된 폴더에 대한 경로를 반환합니다. 팀에 대한 자세한 내용은 다음에서 확인할 수 있습니다. 세트 /?.

중요 사항: set 명령으로 설정된 변수는 해당 변수가 설정된 명령 세션(아래 참조) 동안에만 유효합니다.

예를 들어, 이러한 변수는 모든 경로에 대해 생성될 수 있습니다. 기성 예제를 사용하거나 이를 기반으로 자신만의 예제를 생성하여 각 특정 상황에 변수를 할당하기 위한 알고리즘을 설정하거나 찾으면 됩니다. 일반적으로 이러한 변수는 일부 명령문을 사용하여 배치 파일에 의해 현재 세션에서 생성됩니다.

파일에 변수를 할당하는 예 RunOnceEx.cmd설정을 레지스트리로 가져오기

명령/배치:

@echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "응용 프로그램 설치" /f REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 / D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f SET /A i+=1

이 스크립트에서 SET 명령은 두 가지 변수를 설정합니다. %나%그리고 %열쇠%. 퍼센트 기호 없이 지정되었지만 액세스하려면 %%가 이미 필요합니다. 변하기 쉬운 %열쇠%코드를 단순화하고 최적화하는 역할을 합니다. 현재 명령 세션 전체에서 변경되지 않은 상태로 유지되므로 매번 코드에 레지스트리 키를 포함할 필요가 없습니다. 코드에 나타날 때마다 %열쇠%, HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx로 대체됩니다. 그리고 여기 %나%레지스트리 섹션의 순차적 번호 지정에 사용됩니다. 초기 값이 100인 경우 각 명령 블록 다음에 SET /A i+=1 명령을 사용하여 변수가 1씩 증가하여 100, 101, 102 등의 시퀀스가 ​​생성됩니다. 그래서 라인

암호:

REG 추가 %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f

실제로는 이렇게 작동할 것이다

암호:

REG 추가 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f

파일 조각도 시스템 변수를 사용합니다. %시스템드라이브%, 이는 시스템 드라이브 문자에 해당합니다.

CD에서 애플리케이션을 설치하는 명령 파일에 변수를 할당하는 예:

암호:

%%i(C D E F G H I J K L M N O P Q R S T U V W X Y Z)에 대해 존재하는 경우 %%i:\WIN51 set CDROM=%%i: start /wait “%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe”

이 예에서는 나열된 모든 드라이브에서 특정 파일(WIN51)을 검색합니다. 디스크 중 하나에서 감지되면 후자에 변수가 할당됩니다. %CD 롬%를 클릭하면 생성된 변수에 지정된 경로를 사용하여 소프트웨어가 설치됩니다.

환경 변수 변경 및 자체 변수 추가

위에서 언급했듯이 set 명령으로 설정된 변수의 효과는 현재 명령 세션으로 제한됩니다. 임시 변수에서 시스템 변수나 사용자 변수를 가져오려면 이를 레지스트리에 등록해야 합니다. 이는 다양한 방법으로 수행될 수도 있습니다.

setenv 유틸리티
이 유틸리티는 명령줄(웹사이트, 다운로드)에서 작동합니다. 이 유틸리티는 사용하기 매우 쉽습니다(setenv /?).


사용자 설정|setenv -u 변수 이름 값
시스템 설정|setenv -m 변수 이름 값
설정 기본 사용자|setenv -d 변수 이름 값
현재 사용자 세션 설정|setenv -v 변수_이름 값

설치 단계에서 %temp% 변수를 가져와야 하는 경우 cmdlines.txt에서 이를 수행할 수 있습니다. 예를 들면 다음과 같습니다.

암호:

:: Temp 폴더 생성 및 설정 중... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp

변수를 설정한 후 바로 사용할 수 있어 편리합니다. 글쎄, 거의 즉시 - 다음 팀 세션에서. 현재 세션에서 이를 사용하려면 친숙한 이전 set 명령을 사용할 수 있습니다.

암호:

:: #EgOrus# 생성 중 var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%

레지스트리로 설정 가져오기
처음 로그인한 후 레지스트리를 변경하면 재부팅하거나 사용자 세션이 종료된 후에만 변수가 "작동"하기 시작합니다. 물론 자동 설치 프로세스 중에 원하는 매개변수를 T-12로 가져오고(레지스트리 조정 문서 참조) 이 문제를 우회할 수 있습니다. 현재 사용자 세션에서 할당된 변수를 사용하지 않으려면 레지스트리로 가져오는 것이 적합할 수도 있습니다. REG 파일을 가져오는 과정을 다시 설명하지는 않지만 특정 예를 사용하여 REG ADD 명령을 고려하겠습니다.

시스템에 변수를 갖는 데 관심이 있다고 가정해 보겠습니다. %CD 롬%영구적으로 설치하고 CD에서 응용 프로그램을 설치하는 동안 설치하세요. 위의 코드에 따라 변수를 정의한 후 이를 시스템 변수에 할당해야 합니다.

명령/배치:

%%i(C D E F G H I J K L M N O P Q R S T U V W X Y Z)에 대해 존재하는 경우 %%i:\WIN51 set CDROM=%%i: REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% / 에프

WIN51 파일이 발견되면 해당 파일이 발견된 드라이브에 로컬 변수가 할당됩니다. %CD 롬%, 이는 레지스트리로 가져오기를 통해 즉시 상수 시스템 변수로 할당됩니다. 이 방법은 Oszone Sanja Alone 컨퍼런스의 주제 중 하나로 제안되었습니다. 동시에 당신은 알게 되었습니다. 시스템 변수 설정은 레지스트리에 저장됩니다. 사용자 변수 설정은 HKCU\Environment에 저장됩니다. %PROGRAMFILES% 및 %COMMONPROGRAMFILES% 변수에서 반환된 경로는 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion의 ProgramFilesDir 및 CommonFilesDir 매개 변수에서 볼 수 있지만 여기서 변경하면 안 됩니다. 프로그램 설치 디렉터리(%SystemDrive%\Program Files 제외)는 응답 파일을 통해 구성해야 합니다.

요약
Windows 명령 셸(cmd.exe)은 시스템 작업을 위한 매우 강력한 도구입니다. 배치 파일은 상당한 양의 작업을 자동화할 수 있으므로 Windows를 자동으로 설치하는 데 자주 사용됩니다. 배치 파일에서 변수를 능숙하게 사용하면 다양한 문제를 해결할 수 있습니다. 명령 셸 작업이 더욱 효율적이 되고 동시에 배치 파일의 코드가 단순화됩니다. 웹사이트나 포럼 페이지에서 변수를 사용하는 다른 예를 찾을 수 있습니다. 이 기사에 사용된 모든 예제는 OsZone.ru 포럼 참가자의 스크립트에서 가져온 것입니다. 많은 분들께 감사드립니다.

술어
명령 셸
사용자와 운영 체제 간의 직접적인 통신을 제공하는 별도의 소프트웨어 제품입니다. 명령줄 텍스트 사용자 인터페이스는 텍스트 기반 응용 프로그램 및 유틸리티를 실행할 수 있는 환경을 제공합니다.

cmd.exe- Windows OS 명령 셸이 입력된 명령을 시스템이 이해할 수 있는 형식으로 변환하는 데 사용하는 명령 해석기입니다.

팀 세션시작으로 시작할 수 있습니다. cmd.exe, 배치 파일을 실행하여. 즉, 현재 명령 셸이 생성됩니다. 따라서 이 셸을 종료하면(예: 배치 파일 종료) 명령 세션이 종료됩니다.

사용자 세션(사용자 세션)은 사용자가 로그인(로그온)할 때 시작되고 사용자가 로그오프(로그오프)할 때 종료됩니다.

때로는 양식을 작성해야 할 때도 있습니다. 날짜/시간 변수 V cmd/박쥐스크립트 창문들운영 체제가 제공하는 방식이 아니라 우리에게 필요한 방식입니다.

예를 들어, 이 데이터를 로그 파일에 추가하려면, 이벤트의 시간이나 날짜를 기록하려면 날짜 또는 시간 데이터(일, 월, 연도, 시, 분, 초, 밀리초)를 포함해야 하는 이름으로 파일을 만듭니다. ) 당신은 우리의 임무가 무엇인지 전혀 모릅니다 ... 상상력을 발휘해보자 :)

다음 예에서는 필요한 패턴에 따라 변수가 분류되는 것을 볼 수 있습니다.

h-시 2자리(즉, 시간은 01, 02, ..., 09, ... , 12, ... 24 형식으로 제공됩니다)

m - 분 2자

s - 초 2 기호

ms - 밀리초 2자리, 어떤 이유로든 0부터 99까지

dd - 2일차 징후

mm - 2개월 문자

yyyy - 연도 4자리

변수 사용 예 %날짜%그리고 %시간%스크립트에서 cmd / 박쥐윈도우:

@에코 꺼짐
h=%TIME:~0.2% 설정
m=%TIME:~3.2%로 설정
s=%TIME:~6.2%로 설정
ms=%TIME:~9.2%로 설정
시간 설정=%h%:%m%:%s%:%ms%
dd=%DATE:~0.2%로 설정
mm=%DATE:~3.2%로 설정
yyyy=%DATE:~6.4%로 설정
날짜 설정=%dd%-%mm%-%yyyy%
curdatetime=%curdate% %curtime% 설정

echo 현재 시간은 %curdatetime%입니다.

일부 Windows 버전에서는 발행 날짜 및 시간 형식이 다르기 때문에 이 스크립트는 필요한 대로 정확하게 작동할 수 있습니다.

이론적으로는 비슷한 방식으로 모든 변수의 일부를 가져올 수 있습니다. 요점은 여기서 형식이 다음과 같다는 것입니다.

다음의 첫 번째 숫자: ~는 값을 가져오기 시작하는 문자 수이고, 두 번째 숫자는 캡처할 문자 수입니다.

따라서 우리는 필요에 따라 사용 가능한 Windows 환경 변수의 일부를 취할 수 있다는 것이 밝혀졌습니다.

나는 우리가 얻을 수 있는 값을 가진 다음 변수를 알고 있습니다.

이름
설명
모든 사용자 프로필 "모든 사용자" 프로필의 위치를 ​​반환합니다.
앱데이터 애플리케이션 데이터의 기본 위치를 반환합니다.
CD 현재 폴더의 경로를 지정합니다. 인수가 없는 CD 명령과 동일합니다.
CMDCMDLINE 현재 cmd.exe를 시작하는 데 사용되는 정확한 명령입니다.
CMDEXTVERSION 현재 명령 프로세서 확장 버전.
공통프로그램파일 "Common Files" 디렉터리 위치(일반적으로 %ProgramFiles%\Common Files)
컴퓨터 이름 컴퓨터 이름
COMSPEC 쉘 실행 파일 경로
날짜 현재 날짜를 반환합니다. date /t 명령과 동일한 형식을 사용합니다. Cmd.exe 명령으로 생성됩니다.
오류 수준 마지막으로 사용한 명령의 오류 코드를 반환합니다. 0이 아닌 값은 일반적으로 오류를 나타냅니다.
홈드라이브 사용자의 홈 디렉터리와 연결된 로컬 워크스테이션 드라이브의 이름을 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.
홈패스 사용자의 홈 디렉터리에 대한 전체 경로를 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.
주택 공유 사용자의 공유 홈 디렉터리에 대한 네트워크 경로를 반환합니다. 기본 디렉터리의 위치를 ​​기준으로 설정합니다. 사용자의 홈 디렉터리는 로컬 사용자 및 그룹 스냅인에 지정됩니다.
로그온 서버 현재 사용자에게 권한을 부여하는 데 사용되는 도메인 컨트롤러의 이름
NUMBER_OF_PROCESSORS개 시스템의 프로세서 수
OS 운영 체제 이름. Windows XP 및 Windows 2000은 Windows_NT로 나타납니다.
실행 파일의 검색 경로를 지정합니다.
경로 확장 운영 체제에서 실행 가능한 것으로 간주되는 파일 확장자 목록을 반환합니다.
프로세서_아키텍처 프로세서 아키텍처
PROCESSOR_IDENTIFIER 프로세서 설명
PROCESSOR_LEVEL 프로세서 모델 번호
프로세서_개정 프로세서 개정
프로그램 파일 Program Files 폴더 경로
즉각적인 현재 인터프리터에 대한 명령줄 옵션을 반환합니다. Cmd.exe 명령으로 생성됩니다.
무작위의 0부터 32767까지의 임의의 십진수. Cmd.exe에 의해 생성됨
세션 이름 세션 유형. 기본값은 "콘솔"입니다.
시스템드라이브 Windows 루트 폴더가 있는 디스크
시스템루트 Windows 루트 폴더 경로
온도 또는 TMP 로그인한 사용자가 액세스할 수 있는 애플리케이션에서 사용하는 기본 임시 폴더를 반환합니다. 일부 응용 프로그램에는 TEMP 변수가 필요하고 다른 응용 프로그램에는 TMP 변수가 필요합니다. TEMP와 TMP는 서로 다른 디렉터리를 가리킬 수도 있지만 일반적으로 동일합니다.
시간 현재 시간을 반환합니다. time /t 명령과 동일한 형식을 사용합니다. Cmd.exe 명령으로 생성됩니다.
사용자 도메인 현재 사용자가 속한 도메인 이름
사용자 이름 현재 사용자 이름
유저 프로필 현재 사용자 프로필의 경로
윈디르 Windows가 설치된 디렉토리

이 기사에서는:

  • 변수 정의
  • 명령줄 변수(bat 파일 호출 매개변수)
  • IF 조건 연산자
  • 기능
  • 반환 값 사용(종료 코드 처리)

변수 정의

세트<Имяпеременной>=<Значениепеременной>

SET 문은 매개변수를 조작하는 운영 체제 기능의 확장입니다. 해당 이름이 백분율 기호 사이에 사용될 때마다 해당 이름을 값으로 대체하는 변수를 지정합니다. 따라서 주어진 경우(컴퓨터의 사운드 카드를 사용하는 많은 게임에 필요한 변수):

블래스터 설정=A220 I5 D1 P330

그런 다음 배치 파일에서 다음 구성을 사용할 때:

에코 %블라스터%

"A220 I5 D1 P330"이 화면에 표시됩니다. SET 문을 사용하여 정의된 변수는 환경 변수라고 하며 실행 후 DOS가 다시 시작될 때까지 표시됩니다(메모리에서 수동으로 변경하지 않는 한). 즉, 다른 배치 파일이나 프로그램에서 지정한 후 하나의 배치 파일이나 프로그램에서 사용할 수 있습니다. 가장 유명한 것은 파일을 빠르게 검색하기 위한 경로 집합인 PATH 변수입니다. 이는 autoexec.bat 파일에 설정되어 있습니다.

명령줄 변수
(bat 파일을 호출하기 위한 매개변수)

%<цифра 0-9>

다른 언어와 마찬가지로 배치 파일 언어에서도 bat 파일의 매개변수로 전달받은 변수를 사용할 수 있습니다.

총 10개의 독립변수가 동시에 존재할 수 있습니다. 일반적인 작업에는 3-4면 충분하지만 복잡한 프로그램을 작성하는 데는 매우 작습니다. 변수의 값은 명령줄의 해당 매개변수 값과 같습니다. %0 변수에는 .bat 파일의 이름과 해당 파일의 경로(지정한 경우)가 포함됩니다. 즉, 다음 매개변수를 사용하여 abc.bat 파일을 실행한 경우입니다.

abc.bat a bc def

그러면 변수 %0에는 abc.bat 값이 포함되고, %1에는 a 값이 포함되며, %2에는 bc가 포함되고, %3에는 def가 포함됩니다. 이 속성은 반복 작업을 처리할 때 다양한 배치 파일을 만드는 데 널리 사용됩니다.

명령줄에서 10개 이상의 변수를 가져오려면 SHIFT 명령을 사용할 수 있습니다.

SHIFT 명령을 사용하면 10개 이상의 명령줄 매개변수를 사용할 수 있지만 해당하는 이전 매개변수는 손실됩니다. 즉, SHIFT 명령은 모든 변수 값을 한 단계 왼쪽으로 이동시킵니다. 즉, 변수 %0에는 이전에 변수 %1에 포함된 값이 포함되고, 변수 %1에는 이동 전 변수 %2의 값이 포함됩니다. 그러나 이 작업은 되돌릴 수 없습니다. 즉, 변수를 다시 이동하는 것이 불가능합니다.

IF 조건 연산자

다행스럽게도 최신 Windows 2000 이상의 cmd.exe 명령 해석기는 분기 구문의 명령 블록을 지원하므로 레이블이 있는 IF가 필요하지 않습니다. 명령 블록은 괄호로 묶입니다. 다음과 같습니다(C/C++ 들여쓰기 스타일 모방).

if 조건(

'then' 분기의 Rem 명령

렘...

) 또 다른 (

'else' 분기의 Rem 명령

렘...

구체적인 사용 예:

@에코 꺼짐

빌드모드=%1로 설정

if "%BUILDMODE%" == "" (

에코 실패: 인수가 필요합니다 ^(--debug, --release^)

종료 /b 1

rem 처리를 단순화하기 위해 인수에서 모든 하이픈을 제거합니다.

BUILDMODE=%BUILDMODE:-=% 설정

if "%BUILDMODE%" == "디버그"(

CCFLAGS=/Od /MDd /Z7 설정

) 또 다른 (

CCFLAGS=/O2 /MD를 설정합니다.

제 생각에는 이것이 함께 사는 것이 가능하다고 생각합니다. 하지만 늘 그렇듯이 인생은 생각만큼 단순하지 않습니다. 한 가지 문제가 있습니다. then 및 else 블록에 사용된 변수는 실행 중이 아니라 블록 실행이 시작되기 전에 확장됩니다. 위의 예에서는 문제가 발생하지 않지만 다음에서는 문제가 발생합니다.

if "%BUILDMODE%" == "디버그"(

Echo INFO: 환경 디버그 모드 설정

OPTFLAGS=/Od 설정

CCFLAGS=%OPTFLAGS% /MDd /Z7 설정

) 또 다른 (

Echo INFO: 환경 해제 모드 설정

OPTFLAGS=/O2 설정

CCFLAGS=%OPTFLAGS% /MD 설정

문제는 두 블록 모두 해당 블록 실행 중에 OPTFLAGS 변수가 변경되기 전에 대체가 발생한다는 것입니다. 따라서 CCFLAGS는 이 if 블록이 실행될 당시 OPTFLAGS가 가지고 있던 값으로 채워집니다.

이 문제는 지연된 변수 확장을 사용하여 해결됩니다. !…에 포함된 변수 %...% 대신 직접 사용하는 순간에만 그 의미가 드러납니다. 이 모드는 기본적으로 비활성화되어 있습니다. cmd.exe를 호출할 때 /V:ON 스위치를 사용하거나 다음 명령을 사용하여 활성화할 수 있습니다.

bat 파일 자체의 텍스트에 있습니다. 나에게는 두 번째 방법이 더 편리한 것 같습니다. 누군가에게 특정 매개변수를 사용하여 스크립트를 실행하도록 요구하는 것은 그리 멋진 일이 아닙니다.

그렇다면 이전의 "잘못된" 예는 다음과 같이 수정될 수 있습니다.

setlocal 활성화 지연확장

if "%BUILDMODE%" == "디버그"(

Echo INFO: 디버그 모드 환경 설정

OPTFLAGS=/Od 설정

CCFLAGS=!OPTFLAGS를 설정하세요! /MDd /Z7

) 또 다른 (

Echo INFO: 릴리즈 모드 환경 설정

OPTFLAGS=/O2 설정

CCFLAGS=!OPTFLAGS를 설정하세요! /MD

이제 이것은 거의 완전한 if-then-else 블록입니다. 거의, echo 명령 중 하나에서 닫는 괄호를 만나면 ^ 문자로 이스케이프해야 하기 때문입니다. 그렇지 않으면 파서가 혼란스러워질 것입니다...

그러나 어쨌든 이것은 엄청난 수의 태그와 전환보다 훨씬 낫습니다.

기능

bat 파일에 함수를 만들 수 있나요? 그래 넌 할수있어. 더욱이 때로는 필요할 때도 있습니다. 사실, 조건부로 함수라고 부를 수 있습니다.

call 명령에 대한 특별한 구문이 있는데, 이를 통해 이 호출이 이루어진 위치를 기억하면서 동일한 bat 파일의 표시로 이동할 수 있습니다.

호출:레이블 인수

함수는 다음 명령과 함께 반환됩니다.

종료 /b [선택적 반환 코드]

여기서 /b 키는 매우 중요합니다. 이 키가 없으면 함수가 종료되지 않고 일반적으로 스크립트가 종료됩니다.

자세한 내용을 보려면 명령줄에 다음을 입력하세요.

부르다/?

출구 /?

흥미롭게도 이 구문을 사용하는 call 명령은 가변 인수 %0-%9에 대한 새 프레임을 자동으로 생성하는 재귀 호출을 지원합니다. 때로는 이것이 유용할 수 있습니다. 다음은 명령 언어로 된 재귀 계승 계산의 전형적인 예입니다.

@에코 꺼짐

호출:계속 %1

%RESULT% 에코

출구

rem 계승값을 계산하는 함수

렘 로그인:

rem % 1 계승을 계산하려는 숫자입니다

렘 출력:

rem %RESULT% 계승값

:계승

%1 == 0(

결과=1로 설정

/b 종료

%1 == 1(

결과=1로 설정

/b 종료

/a PARAM=%1 - 1로 설정

호출:팩토리얼 %PARAM%

/a 결과=%1 * %RESULT% 설정

종료 /b

작업 예:

> 팩토리얼.bat 10

3628800

반환 값 사용
(처리 프로그램 종료 코드)

프로그램이 작업을 완료하면 종료 코드를 운영 체제에 반환합니다. 성공적으로 완료되면 0을 반환하고, 그렇지 않으면 오류 코드를 반환하는 것이 일반적입니다. 때때로 또는 오히려 자주 프로그램은 해당 작업의 일부 세부 사항을 배치 파일에서 "학습"할 수 있도록 "의도적으로" 0이 아닌 값을 반환합니다. 예를 들어 프로그램은 누른 키의 코드를 반환하고 .bat 파일은 이를 기반으로 다양한 작업을 수행합니다.

배치 파일은 실행된 프로그램의 종료 코드를 어떻게 찾을 수 있습니까? 이 목적을 위해 ERRORLEVEL 키 변수가 제공됩니다.

오류 수준이 있는 배치 파일의 예:

@에코 꺼짐

REM prg1.exe 프로그램을 실행합니다.

PRG1.EXE

REM 완성 코드 분석

오류 수준 2가 파일을 찾을 수 없는 경우

오류 수준 1이 WRITEERROR로 이동하는 경우

오류 수준이 0이면 종료하세요.

ONEXIT로 이동

:파일을 찾을 수 없습니다.

에코 오류! 파일을 찾을 수 없습니다!

ONEXIT로 이동

:작성자 오류

ECHO 녹음 오류입니다!

ONEXIT로 이동

:EXITOK

ECHO 프로그램이 성공적으로 완료되었습니다.

ONEXIT로 이동

:ONEXIT

종료 코드 분석은 0부터 시작되지 않고 가능한 최대값부터 시작됩니다. 사실 이러한 검사는 "오류 수준이 해당 값보다 크거나 같으면..."을 의미합니다. 즉, 0부터 시작하여 확인하면 첫 번째 줄의 모든 값이 true가 되며 이는 잘못된 것입니다.

이는 이러한 종류의 프로그램에서 가장 흔히 발생하는 오류입니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: