1 获取IP地址
echo StartChangeIPFile echo 获取主机名 for /f %%i in ('hostname') do (set pcName=%%i) ::ping %pcName% -4 echo 开始获取IP并保存在c:\tmp\ip.txt文件中 for /f "tokens=2 delims=[]" %%i in ('ping %pcName% -4^|findstr "%pcName%"') do (set ip=%%i echo %%i>c:\tmp\ip.txt) echo 替换内容 for /f "tokens=* " %%i in (c:\tmp\ip.txt) do set "ip=%%i" if defined ip ( echo 变量 ip 的值不为空 ) else (echo 变量 ip 为空值 pause) ::下面的内容是修改某个文件,将指定内容替换为上面取到的IP,注意不是获取IP的部分啦 ::这里用到了sed命令,如果使用的话,可以网上下载Windows版本的即可 sed "s/=.*IP/=%ip%/g" %DirPath%agent_net.cfg >c:\tmp\agent_net.cfg echo 覆盖内容 copy /y c:\tmp\agent_net.cfg %DirPath%agent_net.cfg
如果主机在hosts文件中加入 127.0.0.1 hostname解析,那么使用如上方法可能获取的ip地址是127.0.0.1,
我们可以使用powershell来获取IP:
#Here is a quick way to get all IP addresses assigned to your #computer: #requires -Version $ipaddress = [System.Net.DNS]::GetHostByName($null) Foreach ($ip in $ipaddress.AddressList) { $ip.IPAddressToString } If you replace $null with a hostname (like "server123"), you can retrieve the IP address(es) assigned to that computer instead, too. #And if you are just interested in IPv4 addresses, try this: #requires -Version $ipaddress = [System.Net.DNS]::GetHostByName($null) foreach($ip in $ipaddress.AddressList) { if ($ip.AddressFamily -eq 'InterNetwork') { $ip.IPAddressToString } }
2 关于For循环
还是参考他人的比较全面,如下:
直接使用window帮助就行,打开cmd,输入 for /?.
比较常用的如下(直接运行bat文件替换下面%为%%,如果再命令行直接写的话,直接单%如下就行了)
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
3 再贴几个语法句式吧
1 if……else
if exist "D:\" ( echo aaa
goto DecompressOnDiskD ) else ( goto DecpmpressOnDiskC )
2 脚本调用其他脚本,万不可使用goto,要用call,否则会执行中断的
3 变量赋值是set
4 程序内跳转,最好使用标签,然后用goto跳转
goto ChangeIp :changeIp echo StartChangeIPFile
5 Windows转义字符是^,如下
set "str1=^<WorkingDirectory^>%cd%^<^/WorkingDirectory^>"