Отсортировать список процессов по ProcessID
Подскажите, пожалуйста,
почему переменная !PID:~-4! не раскрывается, если мы собираем поток для передачи через канал к Sort?
Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
(
for /f "tokens=1,2 delims=," %%a in ('tasklist /nh /fo csv') do (
@echo off
set /A C+=1
set PID=000%%~b
echo !PID:~-4! %%~a
)) | sort
pause
|
Код:
@echo off
setlocal
(
for /f "tokens=1,2 delims=," %%i in ('tasklist /nh /fo csv') do (
set "pid=0000%%~j"
call echo %%pid:~-4%% %%~i
)
) | sort
|
Foreigner, спасибо. Так работает.
|
Забавно. Если написать во внутреннем цикле команду REM - вывода не будет.
|
Цитата:
Цитата Diskretor
почему переменная !PID:~-4! не раскрывается, если мы собираем поток для передачи через канал к Sort? »
|
Потому что команда слева от "|" запускается в отдельном процессе CMD.EXE, в который предварительно копируются все пользовательские переменные окружения, а вот параметры сеанса (в том числе, отложенное расширение переменных, отображение команд и т.п.) сбрасываются в дефолтовые. Другим неприятным моментом такого поведения является то, что все изменения в переменных окружения дочернего CMD.EXE не будут отражены в родительском.
Цитата:
Цитата Diskretor
Если написать во внутреннем цикле команду REM - вывода не будет. »
|
альтернативные варианты: REM. , REM: или REM/
|
Вложений: 1
Цитата:
Цитата amel27
все изменения в переменных окружения дочернего CMD.EXE не будут отражены в родительском. »
|
Да уж. Действительно, нежданчик =)
Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set before=10
(
for /L %%C in (1,1,1) do (
echo %before%
set d=15
set n=%%C& set after=%d%& set after=!d!
echo !n!
echo !after!
)
) 1>&2 | set x=
echo ----------
echo %n%
echo %after%
|
Время: 13:56.
© OSzone.net 2001-