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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

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

KLASS



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

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

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

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

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

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
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: - работает
В консоли (не батнике) аналогично. Что-то я не понимаю суть происходящего...

Всего записей: 284 | Зарегистр. 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"

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

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

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

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

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



Silver 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 понять, что переменная изменена, без перезапуска?

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

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

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

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

Всего записей: 3482 | Зарегистр. 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')

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



Silver 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);
 

Всего записей: 2474 | Зарегистр. 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.

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



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

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


Всего записей: 2474 | Зарегистр. 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"
 

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



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

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

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

Всего записей: 5365 | Зарегистр. 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  

Всего записей: 284 | Зарегистр. 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  

Всего записей: 3218 | Зарегистр. 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.
ну дальше, думаю понятно

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



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

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

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

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

Всего записей: 3218 | Зарегистр. 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" сохраняется имя пользователя.

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



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

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

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

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

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

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

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

Всего записей: 284 | Зарегистр. 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%

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



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

Всего записей: 14007 | Зарегистр. 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 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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru