Пакет Windows: объединение start и FOR / f "tokens = 1" с |экранировать кодированные символы - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь выполнить эту команду из стандартного пакетного файла Windows.

start /B for /f "tokens=1" %%a in ('Query SESSION ^| find /i "rdp"') do (echo yes |reset session %%a)

и выдается ошибка:

"| в это время было неожиданно."

Я только что обнаружил, что это не удается, потому что start в начале.Что с ним не так?

1 Ответ

0 голосов
/ 06 декабря 2018

Из пакетного файла плохая идея попытаться построить правильное однострочное решение с start, очень сложно экранировать / заключить в кавычки сложное выражение.

Но это тихо и просто в использовании start и перейти к метке в том же пакетном файле.

@echo off
REM *** Thread redirector
for /F "tokens=3 delims=:" %%F in ("%~0") do goto %%F

REM *** Start a new thread in this batch file at the label :myThread
start "" /b cmd /c "%~d0\:myThread:\..\%~pnx0"

echo Main
for /L %%n in (1 1 10) DO (
    echo MainThread doing some stuff %%n
    ping localhost -n 2 > nul
)
exit /b

:myThread
for /f "tokens=1" %%a in ('Query SESSION ^| find /i "rdp"') do (
    echo myThread: Resetting session %%a
    echo yes | reset session %%a
)
exit /b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...