找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29005|回复: 8

[文本处理] 【已解决】请问批处理命令set为何不能赋除ilkjnm以外的字母赋值?或超过6个变量?

[复制链接]
发表于 2018-12-7 23:31:36 | 显示全部楼层 |阅读模式
本帖最后由 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   这种请问是什么情况?如何解决?
发表于 2018-12-8 00:48:02 | 显示全部楼层
http://bbs.bathome.net/thread-2189-1-1.html
读一下tokens那部分内容
发表于 2018-12-8 11:29:27 | 显示全部楼层
管理回复有点笼统,让新人比较难解读,,写个通俗点的解释吧!
很几个部分解读:
FOR  给予的变量次序出错,以FOR /F %%I 为例,其中%%I,中的(I)是第一变量,后续的变量应该是 (I)之后的字母,如第二变量应该的 (J) 第三是(K)以此类推。
同理:如果把FOR语句写成FOR /F %%A,%%A,中的(A)是第一变量,B则是第二变量,C 是三,,,

tokens 是把读取到的内容重新排序,应该是重新定义。具体怎么理解和用法看个人的学习和修为。

其次在FOR 中不支持纯数字做变量体如 (%%0~9),BAT 中(%数字)有自己的默认变量,一般是%~数字列为外部或后续参数,,,

PS:读完这些这样基本可以解答你的困惑了。。。
 楼主| 发表于 2018-12-8 14:09:07 | 显示全部楼层
本帖最后由 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开始赋值?
发表于 2018-12-8 17:47:44 | 显示全部楼层
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看下读取是否正确,再对比赋予变量后的,,,,

评分

参与人数 1技术 +1 收起 理由
wd4455 + 1 感谢

查看全部评分

发表于 2018-12-8 19:09:22 | 显示全部楼层
回复 3# jiavip


数字是支持的,虽然不建议这样用。
  1. @echo off
  2. for /f "tokens=1-3" %%1 in ("bbs bathome net") do (
  3.     echo %%1.%%2.%%3
  4. )
复制代码
发表于 2018-12-8 19:14:14 | 显示全部楼层
回复 4# wd4455


for /f "tokens=1-8" %%i
能用几个字母,取决于蓝色部分tokens定义了几列
能用哪几个字母,取决于红色部分的定义是从哪个字母开始的,这里写成%%a,那么后面要用%%a %%b %%c依次类推顺序别乱,不能突然跳到x,y

评分

参与人数 1技术 +1 收起 理由
wd4455 + 1 讲的好透彻。。。。大神就是大神

查看全部评分

 楼主| 发表于 2018-12-8 21:16:57 | 显示全部楼层
本帖最后由 wd4455 于 2018-12-8 21:27 编辑

回复 7# Batcher


请问变量或者输出的文本使用中文会出现小概率的问题么?
例如:赋予变量%%子网掩码
       set  默认网关=
        wmic nic >%temp%\网络信息.txt
是否只要在脚本头部增加chcp 936就没问题了?

另外wmic是否是内部命令?(无需另外安装的命令)
发表于 2018-12-8 21:51:42 | 显示全部楼层
变量使用中文没问题,但是不建议这样做。
wmic是内部命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 20:50 , Processed in 0.011745 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表