Board logo

标题: [文本处理] 【已解决】请问批处理命令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


数字是支持的,虽然不建议这样用。
  1. @echo off
  2. for /f "tokens=1-3" %%1 in ("bbs bathome net") do (
  3.     echo %%1.%%2.%%3
  4. )
复制代码

作者: 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