标题: [文本处理] 【已解决】请问批处理命令set为何不能赋除ilkjnm以外的字母赋值?或超过6个变量? [打印本页]
作者: wd4455 时间: 2018-12-7 23:31 标题: 【已解决】请问批处理命令set为何不能赋除ilkjnm以外的字母赋值?或超过6个变量?
本帖最后由 wd4455 于 2018-12-8 22:00 编辑
请问为何我这个脚本为何不能赋予以除外%I-%J-%K-%L-%M-%N以外的值?
::for /f "tokens=1-6" %%i in ('more /e +10 %0 ^|find /i "%a%"') do set name=%%i&& set desc=%%j&& set IP=%%k&& set MASK=%%l&& set GATEWAY=%%m&& set MACs=%%n
for /f "tokens=1-6" %%i in ('more /e +10 %0 ^|find /i "%a%"') do set name=%%1&& set desc=%%2&& set IP=%%3&& set MASK=%%4&& set GATEWAY=%%5&& set MACs=%%6
for /f "tokens=1-6" %%i in ('more /e +10 %0 ^|find /i "%a%"') do set name=%%b&& set desc=%%c&& set IP=%%d&& set MASK=%%e&& set GATEWAY=%%f&& set MACs=%%h
除了第一行都不能正常赋值。赋值会变成 第2行赋值结果是name=%1 ,第三行赋值结果是 name=%b 这种请问是什么情况?如何解决?
作者: Batcher 时间: 2018-12-8 00:48
http://bbs.bathome.net/thread-2189-1-1.html
读一下tokens那部分内容
作者: jiavip 时间: 2018-12-8 11:29
管理回复有点笼统,让新人比较难解读,,写个通俗点的解释吧!
很几个部分解读:
FOR 给予的变量次序出错,以FOR /F %%I 为例,其中%%I,中的(I)是第一变量,后续的变量应该是 (I)之后的字母,如第二变量应该的 (J) 第三是(K)以此类推。
同理:如果把FOR语句写成FOR /F %%A,%%A,中的(A)是第一变量,B则是第二变量,C 是三,,,
tokens 是把读取到的内容重新排序,应该是重新定义。具体怎么理解和用法看个人的学习和修为。
其次在FOR 中不支持纯数字做变量体如 (%%0~9),BAT 中(%数字)有自己的默认变量,一般是%~数字列为外部或后续参数,,,
PS:读完这些这样基本可以解答你的困惑了。。。
作者: wd4455 时间: 2018-12-8 14:09
本帖最后由 wd4455 于 2018-12-8 14:17 编辑
谢谢两位。。但是我的问题是。。我不能赋予i至n以外的字母变量总共只有6个,我看变量说明是a-y都可以赋予变量,我的这个例子有什么问题么?
for /f "tokens=1-8" %%i in ('more /e +10 %0 ^|find /i "%a%"') do set name=%%i&& set desc=%%j&& set IP=%%k&& set MASK=%%l&& set GATEWAY=%%m&& set MACs=%%n&& set dns1=%%x&& set dns2=%%y
最后的变量取值会变成 dns1=%x dns2=%y
另外。。为何我不能从b开始赋值?
作者: jiavip 时间: 2018-12-8 17:47
for /f "tokens=1-8" %%i
写成
for /f "tokens=1-8" %%a
理论上没问题,可是
('more /e +10 %0 ^|find /i "%a%"') 中的“”%a%“”确认是唯一存在了没?
教你个写BAT脚本的检查思路:我们一般检查脚本要学会用ECHO %变量% 和 PAUSE检查错误点,在赋予变量前先echo %%a ~ z看下读取是否正确,再对比赋予变量后的,,,,
作者: Batcher 时间: 2018-12-8 19:09
回复 3# jiavip
数字是支持的,虽然不建议这样用。- @echo off
- for /f "tokens=1-3" %%1 in ("bbs bathome net") do (
- echo %%1.%%2.%%3
- )
复制代码
作者: Batcher 时间: 2018-12-8 19:14
回复 4# wd4455
for /f "tokens=1-8" %%i
能用几个字母,取决于蓝色部分tokens定义了几列
能用哪几个字母,取决于红色部分的定义是从哪个字母开始的,这里写成%%a,那么后面要用%%a %%b %%c依次类推顺序别乱,不能突然跳到x,y
作者: wd4455 时间: 2018-12-8 21:16
本帖最后由 wd4455 于 2018-12-8 21:27 编辑
回复 7# Batcher
请问变量或者输出的文本使用中文会出现小概率的问题么?
例如:赋予变量%%子网掩码
set 默认网关=
wmic nic >%temp%\网络信息.txt
是否只要在脚本头部增加chcp 936就没问题了?
另外wmic是否是内部命令?(无需另外安装的命令)
作者: Batcher 时间: 2018-12-8 21:51
变量使用中文没问题,但是不建议这样做。
wmic是内部命令
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |