3

バッチ スクリプトは、if が一致する場合でも、else ステートメントを処理します (同様に処理されます)。どうしてこれなの?

set getprocesslistlocal=wmic process get name,processid
echo Type the name of the remote machine to view processes of (or type local for local machine), and press Enter.
set /P remotemachine=
if %remotemachine%==local (
%getprocesslistlocal%
) else (
echo Type the user name to access %remotemachine% with, then press Enter.
set /P remoteuser=
echo Type the password for %remoteuser% on %remotemachine%, then press Enter. (Will be displayed in plaintext)
set /P remotepassword=
set getprocesslistremote=wmic /node %remotemachine% /user:%remoteuser% /password:%remotepass% process get name,processid
%getprocesslistremote%
)
echo End of list.
pause
echo Type the process id and hit Enter.
set /P killid=
if %remotemachine%==local (
wmic process where processid="%killid%" call terminate
) else (
wmic /node %remotemachine% /user:%remoteuser% /password:%remotepass% process where processid="%killid%" call terminate
)
echo Process id %killid% terminated. Press Enter to exit.
pause
4

2 に答える 2

3

エコーしようとしていることが関係している可能性があります: (プレーンテキストで表示されます)

^( と ^) で文字をエスケープできます

于 2013-05-14T22:51:06.960 に答える
0

私はそれを次のように書き直します(スクリプトの後半は終了するまで残してください):

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set /P machine=Type the name of the remote machine to view processes of [local]: 
if "%machine%"=="" (
  set machine=local
  set "getprocesslist=wmic.exe"
) else (
  set "getprocesslist=wmic.exe /node %machine%"
)


echo %getprocesslist%

set /P user=Type the user name to access %machine% with: 
if not "%user%"=="" SET "getprocesslist=%getprocesslist% /user:%user%
set /P password=Type the password for %remoteuser% on %machine% [displayed in plaintext]: 
if not "%password%"=="" SET "getprocesslist=%getprocesslist% /password:%pass%"

SET "getprocesslist=%getprocesslist% process get name,processid"

ECHO cmd.exe /c %getprocesslist%
cmd.exe /c %getprocesslist%

pause
于 2013-05-14T23:15:23.610 に答える