Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников, кодировка скриптов на PowerShell должна быть 1251 (ANSI). Начиная с версии PowerShell Core 6.0, кодировка по умолчанию UTF8NoBOM.
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
Преобразование алиасов в скриптах к полным командам.
Получение детализированной информации из файлов.
Скачивание файлов по списку из файла .csv, ведение лога
Компиляция страниц html сохранённых из браузера в chm
 
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?

Cmd
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 7633 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: m00slim25, 22:28 01-11-2018
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Добавлю: ключ /d в команде cd используется когда необходимо сменить одновременно и диск и каталог назначения.
Можно разбить и на две команды - первой сменить диск, второй каталог, например:
1. C:\> D:
2. D:\> cd \temp
результат:    D:\temp>  
 
Одной командой:
C:>
1. C:> cd /d d:\temp  
результат:    D:\temp>  

Заработало только так:
cd /d %SystemRoot%\System32
taskkill /F /IM abc.exe
 
В ходе тестов оказалось, что и без песочницы в консоли не работает cd... Из теоретических виновников только msys, больше ничего не трогал из того, что может привести к непонятным последствиям. Да и тот был тупо откопирован без установки в систему...
Бсод с откатом системы был автоматическим по непонятным причинам...
 
По ссылке коснулись кодировок, тут был грешен пытался когда-то системе вбить в голову, что 1251 должна использоваться по умолчанию, а не 866. Лет прошло много, что менял вспомнить не могу, но проблемки до сих пор дают знать. В любом случае проявилось бы раньше...
 
Добавлено:
Т.е.:
cd d: - не работает
cd /d d: - работает
В консоли (не батнике) аналогично. Что-то я не понимаю суть происходящего...

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 05:31 24-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, DarkMasterW

Цитата:
Т.е.:  cd d: - не работает  cd /d d: - работает  В консоли (не батнике) аналогично. Что-то я не понимаю суть происходящего...

Вы сами написали - Сценарии для Windows

Цитата:
Ну какой-то нереально нелогичный, куча исключений, флагов переворачивющих логику...

Если серьезно - то эта заморочка еще времен DOS. "cd" - это смена рабочего каталога. На каждом диске свой рабочий каталог. То есть "cd d:\temp" - на диске "d:" рабочим каталогом откроется "\temp". И обращения к диску просто через "d:" - будут обращениями к d:\temp.  
Но это не смена текущего диска. Диск меняется отдельной командой - просто "d:"
Используйте или "cd /d" или "pushd".
 
Насчет taskkill - посмотрите при помощи Process Monitor, куда и зачем он лазит - в песочнице и вне ее.  
И встречал проблему/непонимание - когда люди полностью переписывают %PATH%, вместо того, чтобы дополнить. Что у Вас в PATH (да и вообше в переменных) в песочнице и вне ее? "set > varlist.txt"

Всего записей: 1613 | Зарегистр. 07-08-2002 | Отправлено: 07:42 24-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но это не смена текущего диска. Диск меняется отдельной командой - просто "d:"  

Это уже голова не варит - пересидел. Такие глупости делать стыдно

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 07:50 24-01-2019 | Исправлено: DarkMasterW, 16:28 25-01-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
# Остановить Onedrive
Stop-Process -Name OneDrive -Force -ErrorAction SilentlyContinue
Stop-Process -Name OneDriveSetup -Force -ErrorAction SilentlyContinue
 
# Установить папку для временных файлов для USER и MAchine на C:\Temp
[Environment]::SetEnvironmentVariable("TMP","$env:SystemDrive\Temp","User")
New-ItemProperty -Path HKCU:\Environment -Name TMP -Type ExpandString -Value %SystemDrive%\Temp -Force
[Environment]::SetEnvironmentVariable("TEMP","$env:SystemDrive\Temp","User")
New-ItemProperty -Path HKCU:\Environment -Name TEMP -Type ExpandString -Value %SystemDrive%\Temp -Force
[Environment]::SetEnvironmentVariable("TMP","$env:SystemDrive\Temp","Machine")
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TMP -Type ExpandString -Value %SystemDrive%\Temp -Force
[Environment]::SetEnvironmentVariable("TEMP","$env:SystemDrive\Temp","Machine")
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TEMP -Type ExpandString -Value %SystemDrive%\Temp -Force
 
 
# https://stackoverflow.com/a/48816308/8315671
IF (!("win32.nativemethods" -as [type])) {
    Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
    IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
    uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
 
$HWND_BROADCAST = [intptr]0xffff;
$WM_SETTINGCHANGE = 0x1a;
$result = [System.UIntPtr]::Zero
 
[Win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[System.UIntPtr]::Zero, "Environment", 2, 5000, [ref]$result);
 
# Удалить старую папку TEMP
IF ((Test-Path -Path $env:LOCALAPPDATA\Temp))
{
    Remove-Item $env:LOCALAPPDATA\Temp -Recurse -Force
}
 
# Включить Windows Sandbox
IF (Get-WindowsEdition -Online | Where-Object {$_.Edition -eq "Professional" -or $_.Edition -eq "Enterprise"})
{
    Enable-WindowsOptionalFeature –FeatureName Containers-DisposableClientVM -All -Online -NoRestart
}
 

 
Если попытаться это выполнить, то

Код:
 
Get-WindowsEdition : Произошла ошибка. Не удалось создать каталог во временной папке C
:\Users\11\AppData\Local\Temp\.
Убедитесь, что указан путь к существующей временной папке и используемая учетная запис
ь обладает правами на чтение и запись для этой папки.
 

 
Как заставить PS понять, что переменная изменена, без перезапуска?

Всего записей: 671 | Зарегистр. 27-07-2009 | Отправлено: 09:41 24-01-2019 | Исправлено: farag, 12:26 24-01-2019
2as

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkMasterW

Цитата:
cd d: - не работает

не нужно: cd d:
нужно просто: d:
(для этого пример и привёл - посмотрите внимательнее)
 
...
Сорри, уже выше об этом написали...

Всего записей: 3311 | Зарегистр. 09-09-2003 | Отправлено: 12:09 24-01-2019 | Исправлено: 2as, 12:11 24-01-2019
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag

Цитата:
Как заставить PS понять, что переменная изменена, без перезапуска?

Попробуйте дополнительно сменить переменные у текущего процесса.
Пример, подставьте свою папку:

Код:
[Environment]::SetEnvironmentVariable('TMP','C:\Temp2','Process')
[Environment]::SetEnvironmentVariable('TEMP','C:\Temp2','Process')

Всего записей: 618 | Зарегистр. 12-12-2006 | Отправлено: 14:26 24-01-2019 | Исправлено: westlife, 14:27 24-01-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife

 
Почему тогда не помогло?

Код:
 
IF (!("Win32.NativeMethods" -as [Type]))
{
    # import sendmessagetimeout from win32
    Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessageTimeout(
        IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
        uint fuFlags, uint uTimeout, out UIntPtr lpdwResult
    );
"@
}
$HWND_BROADCAST = [IntPtr] 0xffff;
$WM_SETTINGCHANGE = 0x1a;
$SMTO_ABORTIFHUNG = 0x2
$result = [UIntPtr]::Zero
 
[Win32.Nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [UIntPtr]::Zero, "Environment", $SMTO_ABORTIFHUNG, 5000, [ref] $result);
 

Всего записей: 671 | Зарегистр. 27-07-2009 | Отправлено: 15:23 24-01-2019 | Исправлено: farag, 15:30 24-01-2019
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag

Цитата:
Почему тогда не помогло?  

Почитал про SendMessageTimeout, там написано, что hWnd влияет на окна верхнего уровня.
Я не разбираюсь в этих тонкостях, но видимо окно PS запущено из проводника, и поэтому является дочерним и не подпадает под это действие, поэтому окно PS или ISE надо перезапустить или ему указать явно новые переменные. Можно это проверить в принципе, так ли это.
Просто если окно запускается дочерним, то оно получает все данные у родительского процесса (обычно Explorer).
Проверить сменить папку и перезапустить окно PS, поглядеть какая переменная:

Код:
[Environment]::GetEnvironmentVariables('Process').TEMP

 
Затем тоже самое, только добавить эту функцию SendMessageTimeout, если после перезапуска переменная смениться, то все что я написал выше подтвердится.
Хотя после перезапуска оно и само может получить новые данные. В общем как то так.
 
Добавлено:
Проверил через Process Hacker.
Проводник сам обновляет данные после выполнения в ISE
[Environment]::SetEnvironmentVariable('TEMP','C:\Temp2','User')
[Environment]::SetEnvironmentVariable('TMP', 'C:\Temp2','User')
без SendMessageTimeout.
Если запустить из этого же окна ISE новое окно cmd, то оно имеет все те же старые данные, что и само окно ISE, унаследовало от него.
Если сменить и процессу текущему, то и запущенное из него новое окно cmd получает тоже новые данные.
В общем в этом контексте не проверить SendMessageTimeout, которая в вашем примере сообщает всем обновить параметры, но зато доказана "унаследованность". Надо подумать где будет необходима такая функция SendMessageTimeout.

Всего записей: 618 | Зарегистр. 12-12-2006 | Отправлено: 16:12 24-01-2019 | Исправлено: westlife, 16:22 24-01-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
Спасибо за столько развернутый ответ.
Ну, я довольствуюсь пока

Код:
 
[Environment]::SetEnvironmentVariable('TMP','C:\Temp2','Process')
[Environment]::SetEnvironmentVariable('TEMP','C:\Temp2','Process')  
 


Всего записей: 671 | Зарегистр. 27-07-2009 | Отправлено: 19:22 24-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все тот же многострадальный батник:

Код:
 
@echo off
chcp 1251 > nul
 
:: Папка в которую будут складываться новые песочницы.
:: Путь может быть абсолютным или относительным
:: "\" в конце адреса и кавычки не нужны.  
:: Пример путей:
:: e:\box
:: f:\my_folder\box
:: Если нужен отностиельный путь,
:: то поставьте %CD%.
:: set prefix=%CD%
set prefix=%CD%
 
 
set "prefix=%prefix:"=%"
if "%prefix:~-1%"=="\" set "prefix=%prefix:~0,-1%"  
 
:input  
set /P name=Name of new box:  
 
 
if exist "%prefix%\%name%" (
   echo "%prefix%\%name%" already exist. Input another name.
   goto input
)
 
if "%name%"=="" echo You need input name. & goto :err
 
set "name=%name:"=?%"
set "allowedChars=0-9A-Za-z"
set "deniedChars=<>&%%()|^№"
if not "%name:~-32%"=="%name%" echo Name is too long& goto :err
echo."%name%"| findstr /r /i "[%deniedChars%]" > nul && (echo Forbidden char. & goto :err)  
if errorlevel 1 echo.%name%| findstr /r /c:"[^%allowedChars%]" > nul && (echo Forbidden char. & goto :err)  
 
echo Creating...  
:: Создаем новую песочницу.
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% Enabled y
:: Устанавливаем путь для новой песочницы.
:: И часть дефолтных параметров.
:: Прописываемые поумолчанию шаблоны для увелечения безопасности не генерируются.
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% FileRootPath "%prefix%\%name%"
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% ConfigLevel 7
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% BlockNetworkFiles y
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% BorderColor #00FFFF,ttl
"C:\Program Files\Sandboxie\SbieIni.exe" set %name% DropAdminRights y
 
:: Перезагружаем конфигруацию, чтобы она вступила в силу.
:: (работает только для сервиса, интерфейс не обновится)
"C:\Program Files\Sandboxie\Start.exe" /reload
:: Запускаем cmd.exe внутри новой песочницы, чтобы создались служебные файлы.
"C:\Program Files\Sandboxie\Start.exe" /box:%name% cmd /c
::"C:\Program Files\Sandboxie\Start.exe" mshta "javascript:close();"
::pause
 
:: Создаем для удобства папки с дисками.
for /f "delims=" %%a in ("%prefix%") do set letter=%%~da  
mkdir "%prefix%\%name%\drive\%letter:~0,1%\"
::mkdir "%prefix%\%name%\drive\J\"
 
:: Перезапускаем интерфейс, чтобы обновить в нем список песочниц.
taskkill /F /IM SbieCtrl.exe > nul
start "" "C:\Program Files\Sandboxie\SbieCtrl.exe"  
 
exit /b
 
:err
echo You must use only A-Za-z0-9 in name.
echo Dont use spaces and names longer than 32 characters.
goto input

Почему при запуске уходит в вечный цикл?
cmd.exe /C chcp 1251 | echo aaa | "create_sandboxie 2.0.bat"
 

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 12:59 26-01-2019 | Исправлено: DarkMasterW, 13:00 26-01-2019
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkMasterW

Цитата:
Почему при запуске уходит в вечный цикл?  

Так в первой строке поставьте @echo on , и будет видно, на чем он циклится.
 

Всего записей: 5009 | Зарегистр. 08-02-2006 | Отправлено: 13:22 26-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Перефразирую Почему сыпится на проверке символов? Причем ну ладно посыпалось, но почему ввод то снова принимается и он по новой пытается выполнить этот батник?
На всякий:

Код:
C:\Windows\system32>chcp 1251  1>nul  
 
C:\Windows\system32>set prefix=C:\Windows\system32  
 
C:\Windows\system32>set "prefix=C:\Windows\system32"  
 
C:\Windows\system32>if "2" == "\" set "prefix=C:\Windows\system3"  
 
C:\Windows\system32>set /P name=Name of new box:  
Name of new box:  
C:\Windows\system32>if exist "C:\Windows\system32\aaa " (
echo "C:\Windows\system32\aaa " already exist. Input another name.  
 goto input  
)  
 
C:\Windows\system32>if "aaa " == "" echo You need input name.   & goto :err  
 
C:\Windows\system32>set "name=aaa "  
 
C:\Windows\system32>set "allowedChars=0-9A-Za-z"  
 
C:\Windows\system32>set "deniedChars=<>&%()|^№"  
 
C:\Windows\system32>if not "aaa " == "aaa " echo Name is too long  & goto :err  
 
C:\Windows\system32>echo."aaa " | findstr /r /i "[<>&%()|^№]"   1>nul  && (echo Forbidden char.   & goto :err )  
 
C:\Windows\system32>if errorlevel 1 echo.aaa   | findstr /r /c:"[^0-9A-Za-z]"   1>nul  && (echo Forbidden char.   & goto :err )  
Forbidden char.  
 
C:\Windows\system32>echo You must use only A-Za-z0-9 in name.  
You must use only A-Za-z0-9 in name.
 
C:\Windows\system32>echo Dont use spaces and names longer than 32 characters.  
Dont use spaces and names longer than 32 characters.
 
C:\Windows\system32>goto input  

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 14:02 26-01-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkMasterW
После этой строки:

Цитата:
C:\Windows\system32>echo."aaa " | findstr /r /i "[<>&%()|^№]"   1>nul  && (echo Forbidden char.   & goto :err )

будет errorlevel больше нуля, а далее по коду, успешно выполняется условный блок:

Цитата:
C:\Windows\system32>if errorlevel 1 echo.aaa   | findstr /r /c:"[^0-9A-Za-z]"   1>nul  && (echo Forbidden char.   & goto :err )  
Forbidden char.  
 

то бишь:

Код:
echo.aaa  |...

- совсем не то же самое, что:

Код:
echo.aaa|...


 
Ну и соответственно, далее зацикливание:

Цитата:
 
C:\Windows\system32>echo You must use only A-Za-z0-9 in name.  
You must use only A-Za-z0-9 in name.  
 
C:\Windows\system32>echo Dont use spaces and names longer than 32 characters.  
Dont use spaces and names longer than 32 characters.  
 
C:\Windows\system32>goto input  

Всего записей: 2219 | Зарегистр. 03-02-2009 | Отправлено: 14:51 26-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
Код:
echo.aaa  |...
 
- совсем не то же самое, что:
 
Код:
echo.aaa|...
 
 

Зашуршало, спасибо.
 
Уже не актуально в плане работоспособности(шуршит), но хотелось бы понять: почему когда уходило на второй круг не запрашивло снова ввод, а подставляло прошлый результат?
 
т.е. вывод был
You must use only A-Za-z0-9 in name.
Dont use spaces and names longer than 32 characters.
You must use only A-Za-z0-9 in name.
Dont use spaces and names longer than 32 characters.
You must use only A-Za-z0-9 in name.
Dont use spaces and names longer than 32 characters.
You must use only A-Za-z0-9 in name.
Dont use spaces and names longer than 32 characters.
You must use only A-Za-z0-9 in name.
Dont use spaces and names longer than 32 characters.
ну дальше, думаю понятно

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 15:29 26-01-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkMasterW

Цитата:
почему когда уходило на второй круг не запрашивло снова ввод, а подставляло прошлый результат?

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

Код:
:loop
set "x="
set /p "x=Input new word: "
echo.[%x%]

Всего записей: 2219 | Зарегистр. 03-02-2009 | Отправлено: 14:04 28-01-2019 | Исправлено: YuS_2, 14:05 28-01-2019
2as

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продублирую, пожалуй, здесь.
Определение владельца процесса:

Код:
$proc_name = "wininit.exe"  
$proc_owner = (get-wmiobject win32_process -filter "name='$proc_name'").getowner().user

в переменной "$proc_owner" сохраняется имя пользователя.

Всего записей: 3311 | Зарегистр. 09-09-2003 | Отправлено: 09:55 30-01-2019 | Исправлено: 2as, 09:56 30-01-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2as

Цитата:
сохраняется имя пользователя.

уточню:
... если команды выполняются от имени администратора, иначе будет "индейская хижина" вместо владельца

Всего записей: 2219 | Зарегистр. 03-02-2009 | Отправлено: 10:49 30-01-2019
DarkMasterW

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
надо смотреть вывод в консоль

Я его дал в полном объеме. Дальше просто повторение этого вывода по кругу.

Всего записей: 279 | Зарегистр. 17-04-2010 | Отправлено: 13:36 30-01-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время,  YuS_2, DarkMasterW

Цитата:
На счет не запрашивало ввод - не знаю, надо смотреть вывод в консоль... а вот, подставляет прошлое значение потому, что нет обнуления переменной в коде...

Нет, проблема не в этом.  
Проблема в том, что при использовании конструкции типа  
echo 123 | tst.bat
аболютно все, что работает с stdin получает ввод "123". Бесконечное количество раз. Пример  с pause и set /p data=:

Код:
:loop
set /p data=
pause
set /a count = count + 1
if %count% lss 10 goto :loop
echo %count% %data%

Всего записей: 1613 | Зарегистр. 07-08-2002 | Отправлено: 13:52 30-01-2019
dialmak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy дык переменная  data не определена. я не вникал в предыдущие обсуждения, но имхо переменной нужно присваивать любое значение перед запросом и делать проверку..

Всего записей: 10638 | Зарегистр. 27-04-2013 | Отправлено: 14:22 30-01-2019 | Исправлено: dialmak, 14:36 30-01-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru