EpicCyndaquil
EpicCyndaquil

Reputation: 273

Why is my batch script running both if and else statement when if statement matches?

The batch script processes the else statement even though the if matches (and is processed as well). Why is this?

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

Upvotes: 5

Views: 1327

Answers (2)

djangofan
djangofan

Reputation: 29669

I would rewrite it like so ( leave the second half of the script for you to finish):

@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

Upvotes: 0

Jordan NG
Jordan NG

Reputation: 96

It may have to do with you trying to echo: (Will be displayed in plaintext)

You can escape the characters with ^( and ^)

Upvotes: 6

Related Questions