Консультация № 186647
01.10.2012, 15:52
0.00 руб.
0 3 2
Здравствуйте Уважаемые эксперты! Прошу помощи в следующем вопросе:
Имеется файл (например Prametrs.txt) с перечнем и значенями параметров следующего содержания:
[PARAMETRS]
Parametr1=15:25
Parametr2=11.05.2012
Parametr3=C:\Windows
Parametr4=winrar.exe

Имена параметров звестны, но в файле могут быть в произвольном порядке.
Задачи:
1. Получить значения параметров в переменных среды MS-DOS.
2. Заменить в файле значения параметра 2 на теущую дату.

Обсуждение

давно
Модератор
137394
1850
01.10.2012, 21:05
общий
это ответ
Здравствуйте, Посетитель - 394703!
Код:
@Echo Off
cls

Set In=P:\Delete\Prametrs.txt

Set N0=[PARAMETRS]
Set N1=Parametr1
Set N2=Parametr2
Set N3=Parametr3
Set N4=Parametr4

Set P1=
Set P2=
Set P3=
Set P4=

FOR /F "usebackq tokens=1,2 delims==" %%i in ("%In%") do (
If /I "%%i"=="%N1%" Set P1=%%j
If /I "%%i"=="%N2%" Set P2=%%j
If /I "%%i"=="%N3%" Set P3=%%j
If /I "%%i"=="%N4%" Set P4=%%j
)

: Для даты в системе в формате дд.мм.гггг c любыми разделителями
: Переписываем заново исходный файл с исправленной датой

Echo %N0%>"%In%"
Echo %N1%=%P1%>>"%In%"
Echo %N2%=%Date:~0,2%.%Date:~3,2%.%Date:~6,4%>>"%In%"
Echo %N3%=%P3%>>"%In%"
Echo %N4%=%P4%>>"%In%"

: Отображаем исходные (ДО исправления) значения параметров на экран

Echo %P1%
Echo %P2%
Echo %P3%
Echo %P4%
Цитата: Посетитель - 394703
Имеется файл (например Prametrs.txt) с перечнем и значенями параметров следующего содержания:
Я понимаю, что иных строк в файле нет, а параметры в исходном файле в произвольном порядке. Результат - исправленный файл в соответствии с Вашим заданием и упорядоченный по параметрам. Вы должны указать имена параметров (здесь они названы Parametr1,2,3,4) и заголовок секции (здесь [PARAMETRS]) - в соответствии с заданием. Проследите, чтобы в именах файлов, параметров не было лишних пробелов в конце строки в командном файле, где Вы их определите.
На вопросы и пожелания отвечу в минифоруме этого вопроса.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Мастер-Эксперт
259041
7459
02.10.2012, 05:07
общий
это ответ
Здравствуйте, Посетитель - 394703!
В архиве (1.3 кб) находятся Исполняемый cmd-сценарий и обрабатываемый txt-файл для ответа на Ваш вопрос. Удобнее распаковать их в 1 папку. Но можно разнести их и в разные папки, и тогда в 6й строке сценария Set in=Prametrs.txt придётся перед именем txt-файла добавить путь к нему.

Если Ваша архиватор-программа удобно настроена для работы с cmd-файлами, то Вы можете запускать сценарий Handler.cmd прямо из окна архиватора. Архиватор сам распакует сценарий и обрабатываемый файл Prametrs.txt в папку Temp, запустит сценарий, а сценарий покажет Вам окно исполнения и выделит в Проводнике готовый продукт New.txt с упорядоченными параметрами и текущей датой в значении переменной Parametr2.
Для настройки архиватора WinRar из его меню Параметры \ Установки \ Просмотр в поле "Распаковывать весь архив для файлов" добавьте значение *.cmd правее уже-перечисленных типов и пробела. Должна получиться строка:
*.exe *.htm *.html *.cmd

Сценарий Handler.cmd содержит подробные комментарии. Чтоб ознакомиться с ними дайте из его контекста команду Изменить.
Особенности: в строках типа
Echo €бЇ®«­пҐвбп б業 аЁ© %0 &rem [Исполняется сценарий].
правее команды Echo изображён предискажённый в DOS-кодировку текст, который Вы видите правее коммент-команды rem в скобках [ ]. Предыскажения позволяют отобразить на экране работающего сценария сообщения на русском языке (для плохо-знающих английский). Символ & перед rem - это разделитель команд. С его помощью можно поместить несколько команд в 1 строке (для удобочитаемости прог-текста).
Работа Сценария проверена под WindowsXP.
Неизвестный
03.10.2012, 15:53
общий
Получить параметры переменных среды DOS можно командой SET:

Результат может быть примерно таким:
Код:
ALLUSERSPROFILE=C:\ProgramData
CommonProgramFiles=C:\Program Files\Common Files
ComSpec=C:\Windows\system32\cmd.exe
HOMEDRIVE=C:
NUMBER_OF_PROCESSORS=8
OS=Windows_NT
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 26 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=1a05
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=D:\Temp
TMP=D:\Temp
windir=C:\Windows


Вопрос - как их получить все или выборочно?
Если все, достаточно выполнить команду set > sets.txt и потом распарсить полученный файл. Первое слово - имя переменной, то, что после знака равенства - значение.
В пакетных файлах ms-dos обратиться к конкретной переменной можно так:
Код:
@echo off
echo %windir%
echo %temp%

Переменные выделяются знаками процентов с обеих сторон от имени.

На VBS это выглядит так:
Код:
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")


Перебрать все переменные окружения, vbs:
Код:
Set WshShell = CreateObject("WScript.Shell")
For Each Folder In WshShell.SpecialFolders
WScript.Echo Folder
Next


Установить новое значение переменной, cmd/bat:
Код:
set test=c:\dos;
set test=%test%;d:\dos


Первая строка установит значение переменной окружения TEST значение c:\dos, вторая строка присвоит переменной TEST значение переменной TEST и добавит литерал ;d:\dos, в результате в переменной TEST будет строка c:\dos;d:\dos

Важно: пробелы возле знака равенства в операторе SET значимы.
Пример:
Код:
set test=111
set test =222

echo %test%
echo %test %
Форма ответа