Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/721: Рейтинг темы: голосов - 721, средняя оценка - 4.78
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
#1

Тонкости языка, редкие команды и сложные скрипты

16.10.2012, 06:56. Просмотров 129823. Ответов 94

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

Здесь можете размещать:
  • Ваши статьи;
  • Ссылки на другие статьи (допускаются статьи на английском языке);
  • Редкие ошибки, выдаваемые интерпретатором, способы их устранения/либо причины возникновения.
  • Недокументированные и особые трюки работы с файловой системой, устройствами и т.п.
  • Разрешено обсуждение выложенных здесь материалов (в последствии будут выделены в отдельную тему);
  • Запрещено обсуждение новичками проблем работы с CMD, где вероятная причина - банальная синтаксическая ошибка.


Статьи и тонкости языка:
Основы
  • FAQ по файлам BAT/CMD (статья) ссылка
  • Командная строка Windows (статья) ссылка
  • Особенности реализации командного процессора cmd.exe операционных систем WinNT (статья) сайт
  • Циклические операции и примеры (статья) эта тема
  • Принцип составления однострочных команд Batch (статья) эта тема
Автозапуск
  • Запуск Bat-файла как службы Эта тема
  • Выполнение командного файла перед входом в систему Эта тема
Безопасность и права
  • Элевация прав запуска BAT-файла (отображается диалог контроля учетных записей UAC) ссылка
  • Как запустить командную строку от имени администратора. эта тема
Интерфейс
  • Переключение языка вывода команд консоли на английский ссылка
КомментарийМатематика
  • Деление с выводом дробной части на батниках ссылка
  • Деление через строковую математику (для делимого, превышающего тип данных signed long int) ссылка
  • Получение 16-ричного представления числа эта тема
  • Получение кода символа по таблице ASCII из числового значения byte эта тема
  • Перевод чисел из десятеричной системы в любую (2-16) эта тема
  • Логические операции сравнения для чисел, превышающих арифметику CMD эта тема
Операционная система, реестр
  • Почему нежелательно запускать BAT из 32-битной среды в 64-разрядной системе. ссылка
  • Функции чтения/записи ключа реестра с отображением уровня ошибки ссылка
Переменные и аргументы
  • Подстановка значения переменной в имя или параметр другой переменной эта тема
  • Перебросить значение через локаль эта тема
  • Часто задаваемые вопросы по использованию аргументов командной строки (статья) сайт
  • Получение рабочего каталога на определенном диске эта тема
  • Undocumented Dynamic variables (недокументированные способы раскрытия переменных среды) эта тема
ПотокиПроцессы
  • Получение PID, имени, пути и параметров запуска процесса эта тема
Связь с другими языками программирования и средами, комбинированные батники

  • -- JScript
  • Скомбинированный файл CMD + JS (WSH) эта тема
  • Выполнение JS кода через mshta.exe эта тема
    -- VBScript
  • Передача значения из BAT-сценария в VBS-скрипт эта тема
  • Метод возврата значения из VBS-скрипта в BAT-сценарий эта тема
  • Получение ErrorLevel из команды CMD в переменную VBS-скрипта тема
    -- Реестровый ключ
  • Способ хранения ключа реестра внутри бат-файла эта тема
    -- Ресурсы внутри BAT-файла
  • Распаковка текстовой информации, заданной меткой в файле CMD, во внешний файл тема
  • Встраивание ресурсов в БАТ-файл тема
    -- Другое:
  • Комбинированный файл CMD + KIXTART
  • Объектно-ориентированное программирование на bat ссылка
Текстовые операции и работа с "массивами"
  • Вывод текста без переноса на новую строку (статья) эта тема
  • Чтение текста из файла без пропуска пустых строк эта тема
  • Экранировать восклицательный знак эта тема
  • Получить последний токен в заданной строке эта тема
  • Урезать в строке справа лишние пробелы или другие подряд идущие символы эта тема
  • Получение символов BackSpace (0x08) и Esc (0x27) в переменную эта тема
  • Функция для работы с массивами эта тема
  • Считывание файла в псевдомассив с учетом пустых строк эта тема
  • Функция правильного выравнивания текста по знакам табуляции эта тема
  • Способ передачи в бат-файл параметра содержащего символы & и последующей обработки полученного значения эта тема
Циклы
  • Подстановка переменной в роле модификатора для цикла эта тема
  • Разбиение строки на токены, если разделитель - кавычка эта тема
Файловые операции
  • Объединить 2 файла (сохранив результаты в одном из них) эта тема
  • Получение информации о размере папки эта тема

References, Special Manuals, Книги для High Level Users:
  • Command-line Reference (Microsoft Tech-Net)
  • Недокументированные и малоизвестные возможности Windows XP (книга)
  • Описание встроенных консольных утилит и команд для различных версий ОС dx21.com CMD-Reference

Баги интерпретатора CMD и встроенных команд
Планируется разместить:
Rem не всегда является командой начала комментария
Создание и удаление точек повторной обработки сайт
.

Если у Вас возникли вопросы, создайте новую тему.
16
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 06:56
Ответы с готовыми решениями:

После выполнения определённой команды не выполняются последующие команды
Объясните, пожалуйста, почему может останавливаться выполнение второй и далее...

Тонкости языка С,define
Здравствуйте. Разбираюсь с одной либой для hd44780, есть вопрос по поводу...

Поддерживает ли встроенный сервер PHP скрипты языка Perl?
В PHP существует встроенный сервер. Создаю файл index.html с формой и файл...

создать програму которая содержит в себе команды обработки строк языка асемблер
Создать програму которая содержит в себе команды обработки строк языка...

Как скрипты видят другие скрипты, которые были объявлены ранее?
Может кто-нибудь объяснить как реализовано то, что у нас скрипт, который был...

94
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
13.10.2013, 18:15  [ТС] #41
Способ обращениям к разным веткам JS-скрипта, упакованного в батник

Демонстрируются функции:
1) повышения привилегий
2) Имитация MSGBOX (Popup) с отработкой вариаций нажатой клавиши
3) запуска с сокрытием окна

Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@set @x=0; /*
@echo off
SetLocal EnableExtensions
chdir /d "%~dp0"
 
:: повышение привилегий
if /i "%~1" neq "Admin" ver | find "6." && cscript.exe //nologo //e:jscript "%~f0" "Run" "Admin"& Exit
 
::вызов MSGBOX 
call :msgbox " Архив SITLog поврежден.\n Хотите скачать его еще раз?" YesNo
if errorlevel 1 (
  ;;; echo Запускаю wget сокрытом режиме...
  cscript.exe //nologo //e:jscript "%~f0" "Run" "Hide" "wget -N -P ^"here^" http://tools.safezone.cc/glax24/SIT/SITLog.7z"
) else (
  ;;; echo Вы выбрали "Нет"
)
pause
Exit /B
 
:msgbox [Сообщение] [Вид кнопок - YesNo или OK]
:: JS-имитация окна MSGBOX с возвратом кода ошибки при нажатой клавише: 0 - Нет, 1 - Да]
  if /i "%~2"=="YesNo" (set ButtonConst=36) else (set ButtonConst=64)
  for /f %%a in ('cscript.exe //nologo //e:jscript "%~f0" "Msgbox" "%~1" "%ButtonConst%"') do set msg_err=%%a
  if "%msg_err%"=="6" set "msg_retCode=1"
  if "%msg_err%"=="7" set "msg_retCode=0"
Exit /B %msg_retCode%
 
*/switch (WScript.Arguments(0)) {
  case "Run":
  {
    switch (WScript.Arguments(1)) 
    {
      case "Admin": {
        new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);
        break;
      }
      case "Hide": {
        new ActiveXObject('WScript.Shell').Run (WScript.Arguments(2),0,false);
        break;
      }
    }
  }
  case "Msgbox": {
    WScript.Echo (new ActiveXObject('WScript.Shell').Popup (WScript.Arguments(1).replace(/\\n/g,'\n'),-1,'',+WScript.Arguments(2)));
    break;
  }
}
2
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
09.11.2013, 20:04  [ТС] #42
Демонстрация комбинированного BAT-HTA файла.

Копирование в буфер обмена аргументов запуска батника
от Dragokas

Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off&:: <!--
SetLocal
echo Копирование в буфер аргументов запуска батника
echo Заданы аргументы: %*
 
"%windir%\system32\mshta.exe" "%~f0" %*
 
echo Готово.& echo.
pause
goto :eof
 
//-->
<html>
    <head>
    <HTA:APPLICATION
        ID="objHTA"
        WindowState="minimize"
        ShowInTaskbar="yes"
    />
    </head>
<script language="VBScript">
<!--
Sub Window_onLoad()
    comm = objHTA.CommandLine
    document.parentwindow.clipboardData.SetData "text", mid(comm, instr(2, comm, """") + 2)
    window.close()
End Sub
//-->
</script>
</html>


Способ от ComSpec:

Bash
1
2
3
4
5
6
7
8
9
@echo off
chcp 1251>nul
set "string="Hello, World!" & Hello, Алекс aka Dragokas!"
set "string=%string:"=~!@#$%"
set "string=%string: =$#@!~%"
for /f "delims=" %%i in ("%string%") do (
 mshta "vbscript:document.parentwindow.clipboardData.SetData("text",replace(replace("%%i","~!@#$",chr(34)),"$#@!~%",chr(32)))&close()"
)
exit /b
5
Eva Rosalene
T for Trans-
4050 / 1589 / 302
Регистрация: 06.01.2013
Сообщений: 4,179
Завершенные тесты: 2
24.11.2013, 14:13 #43
Считывание файла в переменную с учетом переносов строк (SIC!)
Код
Bash
1
2
3
4
5
6
7
8
9
10
11
:ReadTo
set _m=^
 
 
 
::Не удаляем пустые строки выше!!!
for /f "usebackq tokens=*" %%A IN (`find /C /V ""^<"%~1"`) DO (set _cn=%%A)
(for /L %%A IN (1 1 !_cn!) DO (set "_fa="&set /p "_fa="&set %~2=!%~2!!_fa!!_m!))<"%~1"
set %~2=!%~2:~0,-1!
(set _cn=&set _fa=&set _m=)
exit /b

Требования к окружениюДолжно быть включено отложенное раскрытие переменных (команда setlocal enabledelayedexpansion)

Синтаксис
Bash
1
call :ReadTo <Имя файла> <Имя переменной>

Пример
some.txt

Код
1
2
3
4
5
6
7


8
9
10
 1
2

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal enabledelayedexpansion
set file=some.txt
call :ReadTo "%file%" fc
echo.!fc!
::echo.%fc% - не работает! Все переменные с CRLF можно раскрывать только через "!"
pause>nul
exit /b
:ReadTo
set _m=^
 
 
 
::Не удаляем пустые строки выше!!!
for /f "usebackq tokens=*" %%A IN (`find /C /V ""^<"%~1"`) DO (set _cn=%%A)
(for /L %%A IN (1 1 !_cn!) DO (set "_fa="&set /p "_fa="&set %~2=!%~2!!_fa!!_m!))<"%~1"
set %~2=!%~2:~0,-1!
(set _cn=&set _fa=&set _m=)
exit /b
Вывод консоли
Код
1
2
3
4
5
6
7


8
9
10
 1
2

2
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
24.11.2013, 16:46  [ТС] #44
FraidZZ, шикарно. Все строки хранятся в одной переменной (не массиве).
Хотелось бы подробно разобрать этот пример здесь: Обсуждение сложных кодов, команд и синтаксиса*
0
Eva Rosalene
T for Trans-
4050 / 1589 / 302
Регистрация: 06.01.2013
Сообщений: 4,179
Завершенные тесты: 2
25.11.2013, 15:30 #45
В качестве логического продолжения:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
setlocal enabledelayedexpansion
set table=ABCD\nEFGH\nIJKL\nMNOP\nQRST\nUVWX\nYZ
call :parse table table_
echo.!table_!
pause>nul
exit /b
:parse
set _CR=^
 
 
set _T=!%~1!
set _a=0
:again_
 if "!_T:~%_a%,1!"=="" goto out_
 if "!_T:~%_a%,2!"=="\n" (
  set %~2=!%~2!!_CR!
  set /a _a=%_a%+1
 ) else (
  set %~2=!%~2!!_T:~%_a%,1!
 )
 set /a _a=%_a%+1
goto again_
:out_
exit /b
Парсинг переменной с \n в переменную с CRLF
2
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
16.01.2014, 03:44  [ТС] #46
Как работают маски в MS-DOS
1
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
26.01.2014, 23:22  [ТС] #47
Почему CMD-шная %RANDOM% не является столь рандомной. (Raymond Chen)
1
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
09.02.2014, 22:20  [ТС] #48
Почему FIND и FINDSTR имеют несвязанный набор функций. (англ. - Raimond Chen)

Добавлено через 14 минут
Почему
Bash
1
for /f "usebackq delims=" %i in (`dir /ahd/b`) do @echo %i
и
Bash
1
dir /ahd/b
могут давать разный вывод?

Ответ здесь:
Скрытый трюк: настройка AutoRun командного процессора (англ. - Raimond Chen)
3
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
12.04.2014, 02:25  [ТС] #49
Запущена ли Windows в безопасном режиме?

Bash
1
2
3
if not Defined SAFEBOOT_OPTION echo Тут нифига не безопасно !!!
if /i "%SAFEBOOT_OPTION%"=="Minimal" echo Безопасный режим (с поддержкой командной строки или без таковой).
if /i "%SAFEBOOT_OPTION%"=="Network" echo Безопасный режим с загрузкой сетевых драйверов.
1
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
15.04.2014, 13:04  [ТС] #50
Длинные имена файлов и каталогов в ДОС

Как известно, длинные имена файлов и каталогов в ДОС записываются сами знаете в каком виде (например Длинный файл.txt запишется как ДЛИННЫ~1.TXT). Однако не всегда в этом есть необходимость, а иногда это просто неудобно. Например, если в одном каталоге находятся Norton Commander, Norton Utilities, Norton Navigator, Norton Crash Guard, (что там еще у Нортона есть), то в ДОСвском NC это будет выглядеть как:
  • NORTON~1
  • NORTON~2
  • NORTON~3
  • NORTON~4
что, согласитесь, не очень-то информативно. А можно сделать, чтобы по-умолчанию имя записывалось длиной в 8 символов, и только при необходимости добавлялась тильда. То есть так:
  • NORTONCO
  • NORTONCR
  • NORTONNA
  • NORTONUT
по крайней мере, ясно, где что. И только если появится еще, скажем Norton Utilities 2.0, то появится запись NORTON~1.

А делается это очень просто. Открываем HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\FileSystem ,
находим двоичный параметр NameNumericTail (а скорее -- не находим, ибо по умолчанию его нет; тогда создаем) и устанавливаем его значение как
'00 00 00 00'. И все. После перезагрузки упомянутый выше Длинный файл.txt можно будет записать как ДЛИННЫЙФ.TXT

Источник
2
sov44
1758 / 742 / 128
Регистрация: 09.04.2011
Сообщений: 1,313
15.04.2014, 13:57 #51
Dragokas, не сработала "фишка" с короткими именами (WinXP, перезагрузку делал)
1
Миниатюры
Тонкости языка, редкие команды и сложные скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
15.04.2014, 14:01  [ТС] #52
Спасибо. Еще дома проверю. Если ничего не получится, снесу пост.
Автор об этом писал во времена Windows NT.
0
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
25.05.2014, 21:59  [ТС] #53
Правила парсинга математики в CMD (глобальное исследование) by Dave Benham & dostips team (англ.).
1
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
20.06.2014, 14:21  [ТС] #54
Подсчет CRC32 ver. 0.1c
Автор: einstein1969

Синтаксис:
CRC32 <строка|файл> [<переменная>]

Подсчитывает CRC32 переданной строки или файла.
Опционально: записывает результат в переменную.

Кликните здесь для просмотра всего текста

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: CRC32 version 0.1c by einstein1969.
:: ----------------------------------------------------------------
::
:: Thanks to: penpen, Magialisk, jeb, dbenham, foxidrive
::
:: 19/06/2014 ver. 0.1c
::            - Tuning performance. Doubled the speed.
::            - Fixed filename with ! bug.
::            - Other code optimization.
::   
:: TODO: Async Mode with pipe and SET/P read.
::
:: Rif: [url]http://www.dostips.com/forum/viewtopic.php?p=30336#p30336[/url]
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
@echo off & setlocal DisableDelayedExpansion
 
:: Show Syntax
if "%~1"=="" (
  echo(
  echo CRC32 ^<string^|filename^> [^<variable^>]
  echo       Calculates the CRC32 of the input string or file.
  echo       Optionally stores it in "variable".
  echo(
  echo Example:
  echo CRC32 "123456789"
  Echo CRC32:0xCBF43926
  exit /b
)
 
set "inFile=%~1"
 
setlocal EnableDelayedExpansion
 
:: String MODE
IF not exist !inFile! (
   set SM=1
   <nul set /p ".=%inFile%" > "%temp%\crc32.tmp"
   call "%~f0" "%temp%\crc32.tmp" %~2
   del "%temp%\crc32.tmp"
   :: Pass the result back over the second endlocal barrier
   if Not "%~2"=="" for %%a in (!crc32!) DO (endlocal & endlocal & set %~2=%%a)
   exit /b
)
 
:: create dummy file (of @=40Hex) of dim %~Z1 for compare with FC. Jeb's technique.
set "$t=%temp%\crc32_$$$.tmp"
set "$t2=%temp%\crc32_$$$2.tmp"
type nul > "!$t2!"
<nul > "!$t!" set /p ".=@"
set "ds=%~z1"
for /l %%n in (1,1,32) do (
  set /a "r=ds %% 2, ds/=2"
  if !r! equ 1 type "!$t!" >> "!$t2!"
  if !ds! gtr 0 type "!$t!" >> "!$t!"
)
set ds=%~z1
 
:: Compare and write to tmp file
if !ds! gtr 50000 echo Wait...
>"!$t!" fc /B "!inFile!" "!$t2!"
 
:: Prepare progress bar
set "L0=_" & set "L1=°" & set "L2=±" & set "L3=ВІ" & set "L4=Г›"
for /L %%l in (0,1,4) do for /L %%c in (0,1,49) do set L%%l=!L%%l!!L%%l:~0,1!
 
:: prepare for fast execute
setlocal
(
for /F "Tokens=1 delims==" %%v in ('set') do set "%%v="
for /f %%a in ('copy /Z "%~f0" nul') do set "_CR=%%a"
 
:: Init b=CRC
set /a b=0xFFFFFFFF
 
>"%temp%\time_t0.tmp" echo %time%
 
:: Scan tmp file
set /a I=1
for /F "usebackq skip=1 tokens=1,2 delims=: " %%b in ("%$t%") do (
 
  :: Fill gaps
  for /L %%B in (!I!, 1, 0x%%b) do (
    set /a "a=(b ^ 0x40) & 0xff"
    for /L %%i in (0,1,7) do set /a "a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1))"
    set /a "b = ((b >> 8)&0x00FFFFFF) ^ a"
  )
 
  :: CRC core calculation
  set /a "a=((((b ^ 0x%%c) & 0xff)>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * ((b ^ 0x%%c) & 1)), a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1)&0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1)&0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1)&0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1)), b = ((b >> 8)&0x00FFFFFF) ^ a, I=0x%%b+2"
 
  :: Progress bar.
  if "!i:~-4!"=="0000" call :progress %ds% "%temp%\time_t0.tmp" %L0% %L1% %L2% %L3% %L4%
)
 
:: Final Bytes/gap
for /L %%B in (!I!, 1, %~z1) do (
  set /a "a=(b ^ 0x40) & 0xff"
  for /L %%i in (0,1,7) do set /a "a=((a>>1) & 0x7FFFFFFF) ^ (0xEDB88320 * (a & 1))"
  set /a "b = ((b >> 8)&0x00FFFFFF) ^ a"
)
 
:: Progress bar. Final
if %ds% gtr 10000 (set I=%~z1 & call :progress %ds% "%temp%\time_t0.tmp" %L0% %L1% %L2% %L3% %L4%)
 
)
endlocal & set b=%b%
 
:: Final operations
set /a "CRC32=b ^ 0xffffffff"
 
:: Convert to Hexdecimal
call cmd /c exit /b !CRC32!
set crc32=!=ExitCode!
 
:: Print out result.
echo(
echo CRC32:!CRC32!
 
:: If requested return into variable.
IF NOT "%~2"=="" IF !SM! equ 1 (endlocal & endlocal & set CRC32=%CRC32%) else (endlocal & endlocal & set %~2=%CRC32%)
exit /b
 
:progress
(   set "t1=!time!" & set/p "t0=" <"%~2"
    for /F "tokens=1-8 delims=:.," %%a in ("!t0: =0!:!t1: =0!") do set /a "a=(((1%%e-1%%a)*60)+1%%f-1%%b)*6000+1%%g%%h-1%%c%%d, a+=(a>>31) & 8640000"
    set /a "max=%1, parz=max/4, k=i/parz, n=k+1, rapp=(i-k*parz)*50/parz, d=50-rapp, vel=I*100/a, pt=I*100/max"
    set L0=%3&set L1=%4&set L2=%5&set L3=%6&set L4=%7&set L5=%7
    for %%k in (!k!) do set LL0=!L%%k!
    for %%n in (!n!) do set LL1=!L%%n!
    for %%r in (!rapp!) do for %%d in (!d!) do <nul set /p "=^<!LL1:~0,%%r!!LL0:~0,%%d!^> !pt!%% - !vel!B/s  !_CR!"
    for /F "Tokens=1 delims==" %%v in ('set') do if /I not "%%v"=="I" if /I not "%%v"=="b" if /I not "%%v"=="_CR" set "%%v="
exit /b )

2
Вложения
Тип файла: rar crc32.rar (1.9 Кб, 24 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
03.07.2014, 17:46  [ТС] #55
Увеличение количества токенов FOR до 64.

http://stackoverflow.com/questions/8...520993#8520993

Дочитал до средины. Как будет время - переведу.
1
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
09.07.2014, 15:12  [ТС] #56
Комбинированный скрипт cmd / Powershell / VB.NET / C# / JS.Net (все в одном

Автор: Liviu (dostips.com)

Кликните здесь для просмотра всего текста

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<# :: --------------------------------------------------------------- .cmd ----
@echo off & setlocal & echo .cmd
 
set "ps=" & for %%X in (powerShell.exe) do (
  set "ps=%%~$PATH:X")
if not defined ps (
  set "ps=%systemRoot%\system32\windowsPowerShell\v1.0\powerShell.exe")
 
set "psArg1=.cmd ->"
<"%~f0" "%ps%" -ExecutionPolicy bypass -NoProfile -Command -
 
endlocal & goto :eof & rem ------------------------------------------ .ps1 --#>
 
param($psArg1 = $env:psArg1)
 
# -------------------------------------------------------------------- .cs ----
$CS = @" 
namespace PS {
  public class CS
  {
    public static void csEcho(string arg)
    { System.Console.WriteLine(arg + " .cmd.ps.cs"); }
  }
}
"@
 
# -------------------------------------------------------------------- .vb ----
$VB = @" 
Namespace PS
  Public Class VB
    Public Shared Sub vbEcho(ByVal arg as String)
      System.Console.WriteLine(arg & " .cmd.ps.vb")
    End Sub
  End Class
End Namespace
"@
 
# -------------------------------------------------------------------- .js ----
$JS = @" 
import System;
package PS
{
  public class JS
  {
    public static function jsEcho(arg : String)
    { System.Console.WriteLine(arg + " .cmd.ps.js"); }
  }
}
"@
 
# ------------------------------------------------------------------- .ps1 ----
 
Add-Type -TypeDefinition $CS -Language CSharp
Add-Type -TypeDefinition $VB -Language VisualBasic
Add-Type -TypeDefinition $JS -Language JScript
 
Write-Output($psArg1 + " .cmd.ps")
 
[PS.CS]::csEcho($psArg1 + " .cmd.ps ->")
[PS.VB]::vbEcho($psArg1 + " .cmd.ps ->")
[PS.JS]::jsEcho($psArg1 + " .cmd.ps ->")
 
exit 0  # ---------------------------------------------------------------------
4
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
13.07.2014, 00:13  [ТС] #57
Надежная проверка наличия прав администратора (promted UAC)

Спасибо Compo (dostips.com)

Bash
1
net session 2>NUL 1>&2 && (echo Ты прав) || (echo Нет прав)
Еще один способ от Dos_Probie
Попытка доступа к системной ветке реестра: NT AUTHORITY\LOCAL SERVICE

Bash
1
reg query "HKU\S-1-5-19" >NUL 2>&1 && (echo Ты прав) || (echo Нет прав)
6
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
18.07.2014, 19:49  [ТС] #58
Еще один способ от меня:

Bash
1
2
set "Priv=OK" & ver |>NUL find /v "5." && WHOAMI /PRIV |>NUL find /i "SeTakeOwnershipPrivilege" || set "Priv=BAD"
echo Ваши права: %Priv%
Здесь сначала предполагается, что права есть.
Дальше проверяется версия ОС.
Если она выше XP / Server 2003, то идет дополнительная проверка:
получаем перечень привилегий. Если в списке привилегий
нет SeTakeOwnershipPrivilege, считает, что проверка на права провалилась.

Перечень прав пониженного в правах администратора.



Перечень прав прошедшего проверку:



Переводчик, похоже, что PROMT
2
Миниатюры
Тонкости языка, редкие команды и сложные скрипты   Тонкости языка, редкие команды и сложные скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
16945 / 7030 / 855
Регистрация: 25.12.2011
Сообщений: 10,837
Записей в блоге: 16
19.08.2014, 00:14  [ТС] #59
WMIC и лишние символы CR - обсуждение dostips.
1
sov44
1758 / 742 / 128
Регистрация: 09.04.2011
Сообщений: 1,313
01.11.2014, 18:03 #60
Выявил для себя нюанс использования штатной команды распаковки обновлений. Если набрать
Код
if not exist c:\3 md c:\3
ogl2010-kb2863942-fullfile-x86-glb.exe  /quiet /extract:c:\3
к дате изменения файла добавляется время часового полюса пользователя. В частности у меня дата 14.05.2014 23:36 меняется на 15.05.2014 03:36

Обсуждение в этой теме: http://www.cyberforum.ru/windows/thread1292179.html
0
Вложения
Тип файла: 7z ogl2010-kb2863942-fullfile-x86-glb.7z (1.09 Мб, 9 просмотров)
01.11.2014, 18:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2014, 18:03

Редкие программы
тема и тупая, но в институте задали такой вопрос: какие программы считаются...

Lotusscript: редкие конструкции
Здравствуйте, коллеги. Накидайте мне здесь, пожалуйста, хитрых, редких,...

Редкие отключения и сбои ПК
Добрый день! Около 4-ех месяцев назад поменял процессор с i3-3225 на i5-3450...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru