Pull to refresh

Comments 19

Да… старый добрый bat. Почему бы не использовать Windows Script Host? Там есть CreateObject и еще много интересного.
WSH не смотрел, но в bat еще можно WMI использовать. Вот например извращенный способ в зависимости от языка ОС определить имена системных параметров:

@rem S-1-5-32-545 - локальные пользователи
@rem S-1-5-32-544 - администраторы
Set GroupSID=S-1-5-32-544
Set GroupName=
For /F "UseBackQ Tokens=1* Delims==" %%I In (`WMIC Group Where "SID = '%GroupSID%'" Get Name /Value ^| Find "="`) Do Set GroupName=%%J
Set GroupName=%GroupName:~0,-1%


В зависимости от языка в GroupName будет или Администраторы, или Administrators
На Windows Server 2003 PowerShell может и не стоять. И уговорить какого-либо бюрократического заказчика его поставить может быть не так уж и просто.
А так да, возможно со временем PowerShell и заменит bat
Получим на выходе файл подобный этому: log.14.02.2012_10-41-42.txt
Однако, если вы любитель работать с самого утра или глубокой ночью, то может получиться и так: log.14.02.2012_ 1-03-28.txt
С радостью рассмотрю ваши предложения, как можно это исправить.

for /f "tokens=1-4 delims=: " %%a in ('echo %time%') do set mytime=%%a_%%b_%%c
Спасибо за красивое однострочное решение.
Единственное, что миллисекунды могут быть не нужны, поэтому лучше так:

for /f "tokens=1-4 delims=: " %%a in ('echo %time:~0,8%') do set mytime=%%a_%%b_%%c
UFO just landed and posted this here
Ну в общем-то идея не нова.
В редакторе Лексикон для DOS инсталлятор был написан на bat-файлах и с одним бинарем ask.com который считывал цифру с клавиатуры и возвращал ее как ERRORLEVEL. Суровые времена были :)
Все наши действия с помощью скрипта постараемся логировать. Для этого задаем имя лог-файла:
@set LOGFILE="log.%DATE%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%.txt"
Однако, если вы любитель работать с самого утра или глубокой ночью, то может получиться и так: log.14.02.2012_ 1-03-28.txt


SET TIME_H=%TIME:~0,2%
if "%TIME_H:~0,1%"==" " SET TIME_H=0%TIME_H:~1,1%
echo %TIME_H%
pause
Обычно в таких случаях скачиваю MSYS www.mingw.org/wiki/MSYS и пишу на православном bash.
И удобнее на порядок и кроссплатформенно.
Ожидал увидеть такой комментарий самым первым.
Обработка %Date% и %Time% страдает от разных настроек на разных машинах, поэтому скрипты становятся совершенно не портируемые.
Например, на моей машине (где пишу скрипт) дата задаётся как Thu 02/16/2012, а на машине-цели — 16.02.2012.

Только поэтому каждый раз, когда встаёт задача генерации папки с журналами, содержащими текущую дату и время, предпочитаю использовать только надёжные способы:

1) python, если можно поставить

2) PowerShell, если Python поставить нельзя
У нас используется движок scriptella Scriptella для создания структуры DB + заливка первоначальных данных. Есть обширные драйвера для него Scriptella drivers
Зачем столько собак, можно же один раз написать @echo off
Комментарии можно писать :: вместо rem, так они красивее смотрятся
Помимо красивости, есть еще и читабельность.
А за :: спасибо, не знал.
Тоже сталкивался с похожей задачей.
Вот только при этом использовал несколько ini-файлов для хранения настроек для каждого из вариантов и универсальный bat-файл.
Для чтения настроек из ini-файлов использовал for:
REM Import local constants
for /F «eol=[ eol=; tokens=1,2* delims==» %%x in (%CONFIG_FILE%) DO SET %%x=%%y
такое наверное красивее на повершелле все таки…
Оно конечно так, вот только там кое-где еще Windows 2000 использовался :)
В общем давно дело было :)
только я один заметил что, «компонент» меняет свой род в каждом новом предложении? то используется в мужском роде, то в женском.
Sign up to leave a comment.

Articles