@Echo Off&Setlocal Enabledelayedexpansion
For /f "delims=" %%i in ( 'curl -s "网址" ^| iconv -f utf-8 -t gb2312' ) do (
Set "i=%%i"
Echo !i!
)
Pause
|
用for命令就可以了,不用单独提取什么吗?例如:查询结果
追问
提取结果:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,4 delims=<>" %%a in ('curl -s "http://wap.ip138.com/ip.asp?ip=%1" ^| iconv -f
utf-8 -t gb2312 ^| find "查询结果"') do (
echo %%a
echo %%b
)
谢谢
----------------------------
测试:发现没有/f参数时,in中的命令将不会执行而视为文本
for /f %%a in ('whoami') do set username = %%a
echo 登录 %username% %date% %time% >>E:\文档\开关机时间.txt
-++++++++++++++++++++++++++++++++++++++++++++++
判断多个网卡
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%a in ('ipconfig /all^|find "Default Gateway"^|sort /r') do (
- if not defined line_str set line_str=%%b
- )
- echo 本机的网关地址为:!line_str!
- 复制代码
--------------------------------------
dos环境下,需要变通一下,用for语句把执行结果赋给环境变量:
FOR /F %%i IN ('hadoop classpath') DO @set SPARK_DIST_CLASSPATH=%%i
实验环境是win10。注意,for语句用在批处理命令中时,需要连用两个%。
也可以用反引号来把需要执行的命令引起来,这时候,需要加参数usebackq:
FOR /F "usebackq" %%i IN (`hadoop classpath`) DO @set SPARK_DIST_CLASSPATH=%%i
-------------
我是想判断系统环境变量里面一个名字叫做“xxx”的是否存在,如果存在,我要看他的值跟一个字符串是否相等,相等就不改变他的值,不想等我就改变,如果不存在,我就新增这个名为xxx的系统变量。是这样的,但不一定是path这个特殊的,可能是其他用户添加的系统变量,比如JAVA_HOME 或者其他的。
追答
用BAT的SET命令截取和判断字符是非常蛋疼的,劝你还是想想别的招吧。
追问
其实不复杂,就是怎么得到xxx的值并赋值给a,之后我自有办法判断。这也是为什么我提问题直击重点。
追答
1 2 3 4 5 6 | @ echo off
for /f "delims=" %%a in ( 'wmic ENVIRONMENT WHERE "Name=' path 'and UserName=' <System> '" GET VariableValue^|findstr "system32"' ) do ( set "a=%%a"
call echo %%a%%
)
pause
|
------------------
@echo off&setlocal enabledelayedexpansion
for /f "delims==" %%i in (e:\test.txt) do (
set /a n+=1
set !n!=%%i
)
set /p a=请输入要提取的行数:
cls&echo 你所提取的行为:!%a%!
这是原来的代码使用来显示test.txt文件里的任意一行请,解释一下 delims==
pause>nul
for /f "eol= tokens=1,2 delims= " %%i in (ip.txt) do s syn %%i %%j 4899 /save
for /f "eol=- tokens=1 delims= " %%i in (result.txt) do echo %%i>>s1.txt
for /f "eol=P tokens=1 delims= " %%i in (s1.txt) do echo %%i>>s2.txt
for /f "eol=S tokens=1 delims= " %%i in (s2.txt) do echo %%i>>ips.txt
------------------
在cmd窗口下for/? 就可以看到for的帮助信息了。
第一个for语句来说参数
/f 是说明对括号中的e:\test.txt进行逐行分析
eol参数本来是用来指定以某个符号开头的字符当中注释行,并不读取
tokens=1,2 指定只取ip.txt中的第一和第二列,应为取了两列,所以需要两个参数来接收取出来的值。第二个参数由第一个参数决定。假设第一个参数为%%a,那么第二个参数就是%%b,以此类推。
----------------------------------------------
delims是分割标示属性,=后面的字符作为分割set集中的标记,=后面可跟多个字符,默认为空格或tab制表位等空白内容。
delims==,?
则表示以=,?这三个符号为分隔符
----------------------------------------
do s syn 貌似是错的,没有s syn 这个命令。
可以是这样:for /f "eol= tokens=1,2 delims= " %%i in (ip.txt) do echo %%i %%j
将text文本中每一行=前的所有内容赋值给变量n,若这行中没有=,则把这行所有内容赋值给n,n为从1开始的阿拉伯数字
然后用!%a%!来取出变量中内容。
---------------------
下面举个例子,假设ip.txt中的内容为
1 2 3 4 5
a a a a a
;a a a a
ab b b b b
那么执行
for /f "eol= tokens=1,2 delims= " %%i in (ip.txt) do echo %%i %%j
显示的结果为1 2a a:a ab b看到了吗?只显示第一列和第二列,
但是如果执行的是for /f "tokens=1,2 delims= " %%i in (ip.txt) do echo %%i %%j,
那么显示结果就变为了1 2a ab b以分号开头的aa不见了,这就是因为默认忽略以分号开头的行,
假设改为
for /f "eol=a tokens=1,2 delims= " %%i in (ip.txt) do echo %%i %%j,那么显示结果就变为了1 2:a ab b以a开头的那一行就被忽略了。再说那两个参数如果你只用%%i而不用%%j,那么你会发现,只显示第一列,这是因为没有接受第二列的参数至于delims指定分隔符,看这个例子a,b c;d用for /f "delims= " %%i in (ip.txt) do echo %%ifor /f "delims=," %%i in (ip.txt) do echo %%ifor /f "delims= ;" %%i in (ip.txt) do echo %%i分别执行以下,应该就会明白了
---------------------
1 2 3 4 5 | :: for /f "tokens=1,2,3,4 delims=/ " %%a in ( "%date%" ) do set mt=%%a
:: 意思为 将 date 时间的前4位赋值给变量mt,应该是2015
:: set d=%%b& set yr=%%c
:: 将%%b的结果赋值给变量d,将%%c的结果赋值给变量yr
:: GAGATOSHUT团队
|
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。