For loop 批处理:用于将IF-Exist用于for循环(for/L)内的远程计算机的语法

For loop 批处理:用于将IF-Exist用于for循环(for/L)内的远程计算机的语法,for-loop,if-statement,batch-file,cmd,For Loop,If Statement,Batch File,Cmd,我试图在for循环中放入If-Exist语句。此批处理脚本的目标是检查网络上的所有设备上是否存在文件。我一直得到的输出是“系统找不到指定的文件” 以下是我迄今为止所做的一切,如有任何帮助,我将不胜感激: @echo off for /f "tokens=3" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /V IPaddr

我试图在for循环中放入If-Exist语句。此批处理脚本的目标是检查网络上的所有设备上是否存在文件。我一直得到的输出是“系统找不到指定的文件”

以下是我迄今为止所做的一切,如有任何帮助,我将不胜感激:

@echo off

for /f "tokens=3" %%a in ('reg query 
"HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"  /V IPaddress /s ^|findstr /ri 
"REG_MULTI_SZ"') do set localip=%%a

for /f "tokens=1-4 delims=. " %%a in ("%localip%") do (
set octetA=%%a
set octetB=%%b
set octetC=%%c
set octetD=%%d
)
FOR /f "tokens=1-4 delims=." %%a in ("%offsets%") do (
SET /a octetA+=%%a
SET /a octetB+=%%b
SET /a octetC+=%%c
SET /a octetD+=%%d
)


for /L %%i in (1,1,255) do @if exist 
"\\%octetA%.%octetB%.%octetC%.%%i\C$\Folder\file.txt"
Echo File exists
) else (
Echo File does not exist
)

我可能会这样做,从一个:

(“^”“%SystemRoot%\System32\reg.exe”查询中的/F令牌^2*%%%G^ “HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces”/S^ /F IPAddress/C/E/V 2^>NUL^|%SystemRoot%\System32\find.exe^ “IPAddress”^“)Do@For/L%%I In(1 1 255)Do@Echo Checking%%~nH.%%I^ &如果存在“\\%%~nH.%%I\C$\Folder\file.txt”(回显文件存在 )Else回显文件不存在 如果没有直接从命令提示符运行此命令,请添加一行
@Pause
,作为新的最后一行

上面的命令实际上只是一行命令,分为几行,以便于阅读。如果要从.exe以单行形式运行,可以使用以下命令:

@For/F Tokens^=2*%G在(“^”“%SystemRoot%\System32\reg.exe”查询“HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces”/S/F IPAddress/C/E/v2^>NUL^;“%SystemRoot%\System32\find.exe”“IPAddress”^“^”中执行@For/L%I在(1 255)中执行@Echo检查%%nH.%Else回显文件不存在

Batch是一种古老的语言,多年来一直在为其添加功能。添加功能是一个问题,因为所选的语法既要适应现有结构,又要明确地实现新的功能

最初,没有“其他”设施-只是
如果某个条件下有某种东西

添加
else
时,
if
语句的一般语法更改为

if somecondition (dosomething) else (dosomethingelse)
其中,
else
子句是可选的,括号可以包括一系列命令,每个命令位于单独的行上

因此,在
)之后包含换行符,并且仅在
)之后包含换行符在语法上是正确的。因此,正确的结构是

if somecondition (
 dosomething
 andanotherthing
 thensomethingelse with these parameters
) else (
 dosomethingelse
 andthat
 andsomethingelse&yetanotherthing
)
请注意,
是另一个增强功能,用于将要在一个物理行上执行的多个命令分开

语法绝对不是自由形式的

因此,
必须出现在与
if
相同的物理行上,并可能启动一个以
终止的语句序列)
,而
else
关键字及其
(如果使用)必须出现在与该终端
相同的物理行上)

因此,

for /L %%i in (1,1,255) do @if exist 
"\\%octetA%.%octetB%.%octetC%.%%i\C$\Folder\file.txt"
Echo File exists
) else (
Echo File does not exist
)
要求
“\\%octetA%。%octetB%。%octetB%。%i\C$\Folder\file.txt”
exist
位于同一物理行上(不是自由格式,因此不能破坏条件子句
exists filename
),并且必须有
在同一物理行上,开始在条件true下执行的语句序列,因为您使用的是
else
子句

for /L %%i in (1,1,255) do @if exist "\\%octetA%.%octetB%.%octetC%.%%i\C$\Folder\file.txt" (
Echo File exists
) else (
Echo File does not exist
)

引用整个路径而不是组件,并删除
后面的换行符(如果存在)
…谢谢!这正是我所寻找的。我还试图找到一种方法,如果机器有两个网卡,它可以从特定NIC获取IP。如果有任何想法,我们也将不胜感激。