我问过几个人问题是什么,并且在没有解决方案的情况下走了两次。我之前没有玩过批次,所以这可能是一个简单的错误。该代码目前应该使用wmic提供进程列表。最后,我想把它设置为杀死进程(我应该能够相当容易地做到),但我必须首先克服这个障碍。
@echo off
set getprocesslistlocal=wmic process get name,processid
set /P remotemachinecheck=Type the name of the remote machine to view processes of (or type local for local machine), and press Enter.
if %remotemachinecheck%==local
(
%getprocesslistlocal%
) else (
set remotemachine=%remotemachinecheck%
set /P remoteuser=Type the user name to access %remotemachine% with, then press Enter.
set /P remotepassword=[Type the password for %remoteuser% on %remotemachine%, then press Enter. Watch your back, it won't be hidden!
set getprocesslistremote=wmic /node %remotemachine% /user:%remoteuser% /password:%remotepass% process get name,processid
%getprocesslistremote%
)
echo End of list. Press any key to choose process to kill.
@echo off
pause>null
答案 0 :(得分:0)
您要做的第一件事是将@echo off
注释掉(或将其更改为@echo on
),这样您就可以看到确切地说是哪一行导致错误。
你要看的第二件事是命令在执行前被替换处理,而不是行。
这意味着整个if ( ) else ( )
结构将在设置remotemachine
变量之前对其进行替换,这意味着它不会被设置为您想要的,你想用它。
例如,此代码:
@echo off
set xyzzy=plugh
if a==a (
set xyzzy=twisty
echo %xyzzy%
)
不会输出twisty
,您可能会想到,而是提供plugh
。
您需要研究延迟扩展和!!
扩展运算符:
@setlocal enableextensions enabledelayedexpansion
@echo off
set xyzzy=plugh
if a==a (
set xyzzy=twisty
echo !xyzzy!
)
endlocal
第三件事,我怀疑这是导致您眼前问题的原因,将(
移到if
行的末尾:
if %remotemachinecheck%==local (
使用以下行中的(
,会产生如下错误:
The syntax of the command is incorrect.
但这是一个棘手的事情:它在<{em> if
行之前输出,这可能会让你相信错误是在前一行,按照下面的记录(缩进计算机生成的行:
c:\pax> type qq1.cmd
set q=w
if a==a
(
echo yes
)
c:\pax> qq1
c>\pax> set q=w
The syntax of the command is incorrect.
c:\pax> if a==a
c:\pax> type qq2.cmd
set q=w
if a==a (
echo yes
)
c:\pax> qq2
c>\pax> set q=w
c:\pax> if a==a (echo equal )
equal