[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】请问批处理命令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   这种请问是什么情况?如何解决?

http://bbs.bathome.net/thread-2189-1-1.html
读一下tokens那部分内容
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

管理回复有点笼统,让新人比较难解读,,写个通俗点的解释吧!
很几个部分解读:
FOR  给予的变量次序出错,以FOR /F %%I 为例,其中%%I,中的(I)是第一变量,后续的变量应该是 (I)之后的字母,如第二变量应该的 (J) 第三是(K)以此类推。
同理:如果把FOR语句写成FOR /F %%A,%%A,中的(A)是第一变量,B则是第二变量,C 是三,,,

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

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

PS:读完这些这样基本可以解答你的困惑了。。。

TOP

本帖最后由 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开始赋值?

TOP

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

评分人数

TOP

回复 3# jiavip


数字是支持的,虽然不建议这样用。
  1. @echo off
  2. for /f "tokens=1-3" %%1 in ("bbs bathome net") do (
  3.     echo %%1.%%2.%%3
  4. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# wd4455


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

评分人数

    • wd4455: 讲的好透彻。。。。大神就是大神技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 wd4455 于 2018-12-8 21:27 编辑

回复 7# Batcher


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

另外wmic是否是内部命令?(无需另外安装的命令)

TOP

变量使用中文没问题,但是不建议这样做。
wmic是内部命令
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表