Поиск по этому блогу

вторник, 10 мая 2016 г.

Практикум по "windows shell scripting"

В предыдущем посте собрал подборку видео, а в этом постарался все повторить. Оказалось, что часть команд устарели (видеоролики хорошие, но старенькие), так что здесь еще и ссылки на мануалы с technet.microsoft.com
Environment Variables.aspx)
Using command redirection operators The & redirection operator duplicates output or input from one specified handle to another specified handle. For example ... (см. ниже)
If
goto
For

Shell Scripting: Basic Shell Scripting (firsr.*bat)J

In [ ]:
@rem This is my first script
:: This is analog of first line
@echo off
echo Wonderful World
@echo on
dir c:\

Shell Scripting: Redirection (redir.*bat)

In [ ]:
@echo off
for /F "tokens=1-4 delims/ " %%I IN ('DATE /t') DO SET mydate=%%J_%%K_%%L
echo this is yet anothe script >> append_%mydate%.txt
echo this is yet the second script >> append_%mydate%.txt
In [ ]:
@echo off
echo ^<body^> >> html.html
echo ^<h1^> >> html.html

echo This is some text ^<br^> >> html.html

echo ^<^/h1^> >> html.html
echo ^<^/body^> >> html.html
In [ ]:
@echo off
ping localhost >> ping.txt 2>&1
net use *\\servername\sharename >>ping.txt 2>&1
Все выполняется, но файл у меня записался в кодировке CP 866 (как в консоли)
In [ ]:
Обмен пакетами с pb [::1] с 32 байтами данных:
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 

Статистика Ping для ::1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

Обмен пакетами с pb [::1] с 32 байтами данных:
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 
Ответ от ::1: время<1мс 

Статистика Ping для ::1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Системная ошибка 67.

Не найдено сетевое имя.
HandleNumeric equivalent of handleDescription
STDIN0Keyboard input
STDOUT1Output to the Command Prompt window
STDERR2Error output to the Command Prompt window
UNDEFINED3-9These handles are defined individually by the application and are specific to each tool.
The & redirection operator duplicates output or input from one specified handle to another specified handle.
For example, to send dir output to File.txt and send the error output to File.txt, type:
In [ ]:
dir>c:\file.txt 2>&1 
When you duplicate a handle, you duplicate all characteristics of the original occurrence of the handle.
For example, if a handle has write-only access, all duplicates of that handle have write-only access.
You cannot duplicate a handle with read-only access into a handle with write-only access.

Shell Scripting: The IF Statement

In [ ]:
@echo off
set name=%1
if .%name%.==.Bob. echo %name% and Bob are the same.
In [ ]:
@echo off
if exist "c:\bat" echo the file exists
In [ ]:
@echo off
copy "c:\bat\text doc with spaces in title.txt" "c:\bat\temp1.txt"
if errorlevel 0 if not error level 1 GOTO :worked
:Failed
echo the command filed
Goto :EOF
:worked
Echo the command was successful
Goto :EOF
goto (EOF - end of filescript)
Working with command extensions
If command extensions are enabled (that is, the default) and you use the goto command with a target label of :EOF, you transfer control to the end of the current batch script file and exit the batch script file without defining a label. When you use goto with the :EOF label, you must insert a colon before the label. For example:
goto :EOF
For a description of extensions to the call command that make this feature useful, see cmd in Related Topics.

Shell Scripting: Operators (op.*bat)

In [ ]:
@echo off
set /A no=0
:number
set /A no=%no%+1
echo %no%
echo ^<a href=http://www.images.com/image_%no%.jpg^>image_%no%^<^/a^>^<br^> >> image.html
if %no% LSS 11 GOTO :number
In [ ]:
#В видео ошибка, надо писать c кавычками:
... <a href="http://www.images.com/image_%no%.jpg"^> ...
In [ ]:
####Shell Scripting: Loops
In [ ]:
@echo off
for /f %%i in (c:\hosts.txt) DO @ping -n 1 %%i
вможно не читать строчки из файла, просто записать в скобках:
In [ ]:
@echo off
for /F "tokens=1-3" %%I IN ("localhost 127.0.0.1 server01") DO @ping -n 1 %%I
Не могу повторить пример, потому находим другие примеры вот отсюда ss64.com
In [ ]:
FOR /F "delims==" %G IN ('SET') DO @Echo %G
Распечатывает все имен переменных окружения..., а ниже пример оттуда же
In [ ]:
#To put the Windows Version into an environment variable
   @echo off 
   ::parse the VER command 
   FOR /F "tokens=4*" %%G IN ('ver') DO SET _version=%%G 
   :: show the result 
   echo %_version%

Shell Scripting: Arguments

In [ ]:
@echo off
if exist %1 copy %systemdrive%\%1 "%userprofile%"\desktop
после запуска запрашивает один аргумент с именем файла (папки?) для копирования
In [ ]:
@echo off
@echo The first argument is %1
@echo The second argument is %2
@echo The ZERO argument is filename itself %0
@echo Allt arguments is * instead digit  %*
In [ ]:
####Shell Spricting: Environment Variables 
In [ ]:
####Приложения
In [ ]:
F:\bat>set /?
Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

  переменная  Имя переменной среды.
  строка      Строка символов, присваиваемая указанной переменной.

Введите SET без параметров для вывода текущих переменных среды.

Изменение команды SET при включении расширенной обработки команд:

Если при вызове указать только имя переменной без знака равенства и значения,
команда SET выведет значения всех переменных, имя которых начинается
с указанной строки.  Например:

    SET P

Эта команда выведет значения всех переменных, имена которых начинаются с 'P'.

Если имя переменной не найдено в текущей среде, при возврате команда SET
установит значение ошибки ERRORLEVEL 1.

Команда SET не допускает использование знака равенства в имени
переменной среды.

Команда SET поддерживает два дополнительных ключа:

    SET /A выражение
    SET /P variable=[promptString]
Для продолжения нажмите любую клавишу . . . (или см. предыдущий пост)
In [ ]:
... еще из **set /?**
При включенной расширенной обработке команд доступны несколько переменных
среды, которые расширяются, но не отображаются в списке при вызове команды SET.
Значения этих переменных вычисляются динамически каждый раз при их извлечении.
Если пользователь явно задает переменные с одним из этих имен,
то это определение переопределяет соответствующее динамическое определение,
описанное ниже:

%CD% - заменяется строкой текущего каталога.

%DATE% - заменяется текущей датой с форматом команды DATE.

%TIME% - заменяется текущей датой с форматом команды TIME.

%RANDOM% - заменяется случайным десятичным числом в диапазоне от 0 до 32767.

%ERRORLEVEL% - заменяется текущим значением ERRORLEVEL

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

%CMDCMDLINE% - заменяется исходной командной строкой, которая вызвала
командный процессор.

%HIGHESTNUMANODENUMBER% - заменяется максимальным номером узла NUMA
    на этом компьютере.

F:\bat>


Посты чуть ниже также могут вас заинтересовать

3 комментария:

Sergey Borisovich комментирует...

Важная ссылка ... %~f1 - это "расширения" параметров.
подробно здесь: http://ss64.com/nt/syntax-args.html


Command Line arguments (Parameters)

Parameter Extensions

When an argument is used to supply a filename then the following extended syntax can be applied:

we are using the variable %1 (but this works for any parameter)


%~f1 Expand %1 to a Fully qualified path name - C:\utils\MyFile.txt


Sergey Borisovich комментирует...

Сбор системных данных ПК через командную строку windows
http://cmd4win.ru/stati-i-materialy/90-izuchenie-sistemnoj-informaczii

Использование команд DRIVERQUERY, SYSTEMINFO, NLSINFO

Sergey Borisovich комментирует...

F:\bat>DRIVERQUERY /?

DRIVERQUERY [/S [/U [/P []]]]
[/FO ] [/NH] [/SI] [/V]
Описание:
Эта команда позволяет администратору просмотреть список установленных
драйверов устройств.

Список параметров:
/S Подключаемый удаленный компьютер.

/U [\] Пользовательский контекст, в котором
должна выполняться эта команда.

/P [] Пароль для этого пользовательского
контекста.

/FO Формат выводимых данных.
Допустимые значения для данного параметра
"TABLE", "LIST", "CSV".

/NH Не отображать заголовки столбцов в
выходных данных.
Допускается только для форматов "TABLE" и "CSV".

/SI Отображение информации о подписанных
драйверах.
/V Отображение подробной информации.
Не применим для подписанных драйверов.

/? Вывод справки по использованию.

Примеры:
DRIVERQUERY
DRIVERQUERY /FO CSV /SI
DRIVERQUERY /NH
DRIVERQUERY /S /U /V
DRIVERQUERY /S /U \ /P /FO LIST

F:\bat>