Batch file 批处理文件-语法命令不正确
我得到了下面的命令Batch file 批处理文件-语法命令不正确,batch-file,psexec,Batch File,Psexec,我得到了下面的命令 @echo off pushd %~dp0 echo "checking unhealthy cmclient" >> %~dp0\pc_down_info.txt for /F %%M in (%~dp0\pc_info.txt) do ( ping -n 1 -w 1 %%M >nul if errorlevel 1 echo %%M is down >> %~dp0\pc_down_info.txt
@echo off
pushd %~dp0
echo "checking unhealthy cmclient" >> %~dp0\pc_down_info.txt
for /F %%M in (%~dp0\pc_info.txt) do (
ping -n 1 -w 1 %%M >nul
if errorlevel 1 echo %%M is down >> %~dp0\pc_down_info.txt
If not errorlevel 1 (
cd c:\psexec
psexec -d -i \\%%M %~dp0\FixCM.exe
)
)
pause
我将尝试使用psexec远程执行一个文件。我在PC_info.txt中获得了PC的列表。我正在尝试执行共享驱动器中的FixCM.exe。但它会提示“语法命令不正确”。我的代码出了什么问题?这里是一个快速重写,希望覆盖到目前为止提出的所有评论
@Echo关闭
Echo=“检查不健康的cmclient”>>“%~dp0pc\u down\u info.txt”
对于(“%~dp0pc_info.txt”)中的/F“UseBackQ”%%M,请执行以下操作(
(“%\uuuu AppDir\uuuu%Ping.exe”-n1-w1%%M)>nul2>&1
如果错误级别1(Echo=%%M已关闭>>“%~dp0pc\u down\u info.txt”)其他(
“C:\PsExec\PsExec.exe”-d-i\\%%M“%~dp0FixCM.exe”))
暂停
您会注意到我在双引号中放置了路径,因为这是一种很好的做法,而且我不知道脚本目录是否包含字符,例如空格,如果没有空格,将导致问题。您只使用前导百分比符号引用命令行参数
%dp0
另外,(
需要与的在同一行上(如果
,则为)。编辑上面的我的代码后,另一个错误提示“psexec
不能识别为内部或外部命令”,太令人沮丧了。你确定在C:
的根目录中有一个名为psexec
的目录,其中包括一个名为psexec
的可执行文件,其扩展名如%pathext%
中所定义的那样吗?如果是这样的话,它可能很简单,就像%~dp0
是一个不同的驱动器,你需要更改cd C:\psexec
到cd/d c:\psexec
或现有的另一个可执行文件,其名称为psexec
,具有%pathext%
中定义的另一扩展名。如果批处理文件位于不同的驱动器号中,则cd
命令需要使用/d
选项。不管怎样,为什么不直接指定完整的文件名执行psexec时的路径。否则,您将执行一大堆不需要执行的CD命令。我刚刚查看了代码,这些字符是做什么的?2>&1
?我真的需要放置这些字符以避免错误吗?它不会避免错误,只是将标准和错误输出重定向到空设备。因为我们只需要现在,这些潜在消息的错误级别是多余的。