本篇文章给大家谈谈KTR-SI,SYNTEX,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、汇编语言 照书抄写的 怎么还会有错误。
- 2、汇编问题,在线等待~~~
- 3、汇编高手请进!!!
- 4、怎么改变sourceinsight的编码格式
- 5、matalab神经网络工具箱中的newff.m完整的程序结构是什么样子的?
- 6、Windows批处理-for命令详解
汇编语言 照书抄写的 怎么还会有错误。
DATA SEGMENT
VALUE DW 5678H,6060H----逗号,桥数不可用中文逗号
TABLE DB 33H,55H,20H----逗号,不可用中文逗号
DATA ENDS
code segment
assume cs :code ,ds:data
start:
mov ax ,data
mova ds,ax----MOVA A!!!
mov ax ,value---前边虽然定义了value,但是没坦改有定义成功
mov bx ,ax
mov ax value
mov [ax],2000H----[AX] ? 不可
mov dl,80H
mov si,0020H
mov [bx+si] ,dl
mov table [bx+si],al-敏信首--前边虽然定义了,但是没有定义成功
mov ax,4C00H
int 21H
code ends
end start
汇编问题,在线等待~~~
这是我自己编过项目中的多字节运算子程序
有加法,除法,减乘更为简单类陪者推一下吧
注释写得很详细了,出口入口地址也有标记
;n个数据相加子程序
;11,13,15为进位。12,14,16为相加宏乱宏结果,分别为低8位、中、高8位
;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
ADDP: MOV 11H,#00H
MOV 12H,#00H
MOV R0,#20H ;---"20"起始位置
MOV 12H,@R0
LOOP1: MOV A,R0
ADD A,#03H
MOV R1,A
MOV A,12H
ADD A,@R1
JNB PSW.7,SI1
INC 11H
SI1: MOV 12H,A
MOV A,R1
MOV R0,A
CJNE R0,#4DH,LOOP1 ;---"4D"终止变量,YANG YF DESIGN
MOV A,#00H
MOV 13H,#00H
MOV 14H,#00H
MOV R0,#21H ;---"21"起始位置
MOV 14H,@R0
MOV A,14H
ADD A,11H
MOV 14H,A
LOOP2: MOV A,R0
ADD A,#03H
MOV R1,A
MOV A,14H
ADD A,@R1
JNB PSW.7,SI2
INC 13H
SI2: MOV 14H,A
MOV A,R1
MOV R0,A
CJNE R0,#4EH,LOOP2 ;---"4E"终止变量
MOV A,#00H
MOV 15H,#00H
MOV 16H,#00H
MOV R0,#22H ;---"22"起始位置
MOV 15H,@R0
MOV A,16H
ADD A,13H
MOV 16H,A
LOOP3: MOV A,R0
ADD A,#03H
MOV R1,A
MOV A,16H
ADD A,@R1
JNB PSW.7,SI3
INC 15H
SI3: MOV 16H,A
MOV A,R1
MOV R0,A
CJNE R0,#4FH,LOOP3 ;---"4F"终止自定义位置变量 ,
MOV A,#00H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;除法运算子程序
;支持被除数32位、除数24位,任意位长除法
;被除数需根据计时和累加组数****预先置入,****调试准确度调整亦调节此值!!!!!!!!
;17H、18H、19H为除数输入口,32H、33H、34H、35H为运算结果
;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
SETDIV: MOV P1,#0FFH
JNB P1.1,MEAS_F ;当P1.1置1(蔽册高)为测速,置0(低)为测频
MEAS_V: MOV R2,#11111111B ;***测速****
MOV R3,#11101000B ;被除数R2-R5,转移至22H-25H进行变位处理
MOV R4,#00100101B ;**被除数为定值,前端0的个数已知
MOV R5,#00001011B ;设被除数前端0的个数已知为y,除数前端0的个数计数为x(R0),后部循环次数为(32-y)-(24-x)=(8-y)+x
JMP STARDIV
MEAS_F: MOV R2,#00111010B ;***测频**** YANG YF DESIGN
MOV R3,#01100110B ;被除数R2-R5,转移至22H-25H进行变位处理
MOV R4,#00111110B ;**被除数为定值,前端0的个数已知
MOV R5,#10000111B ;设被除数前端0的个数已知为y,除数前端0的个数计数为x(R0),后部循环次数为(32-y)-(24-x)=(8-y)+x
JMP STARDIV
STARDIV: MOV 22H,R2
MOV 23H,R3
MOV 24H,R4
MOV 25H,R5
MOV 17H,16H ;除数17H-19H,载入累加后12H、14H、16H结果
MOV 18H,14H
MOV 19H,12H
MOV 32H,#00H ;结果输出位32H-35H初置0 YANG YF DESIGN
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV R0,#00H
MOV R1,#00H
MOV 10H,#00H
CHECKFRONT: CLR C
MOV A,17H ;检查除数高位是否有空位0
RLC A
JNC MOVFRONT
JMP LOOPCOUNT
MOVFRONT: INC R0
CLR C ;除数高位空位为0时前移
MOV A,19H ;1)
RLC A
MOV 19H,A
MOV A,18H ;2)
RLC A
MOV 18H,A
MOV A,17H ;3)
RLC A
MOV 17H,A
JMP CHECKFRONT
LOOPCOUNT: MOV A,#09H ;
ADD A,R0
MOV 10H,A ;后部循环次数R0
JUDGSUB: MOV PSW,#00H
MOV A,R1
CJNE A,10H,JMP0
JMP RESULTDIV
JMP0: MOV A,22H
MOV C,ACC.7 ;******!!!!
MOV F0,C
CLR C ;******!!!!
SUBB A,17H
JC CANOTSUB ;溢位
JNZ JMP1 ;WHEN ACC!=#00H THEN JUMP
MOV A,23H
CLR C
SUBB A,18H
JC CANOTSUB
JMP1: JNZ JMP2 ;WHEN ACC!=#00H THEN JUMP
MOV A,24H
CLR C
SUBB A,19H
JC CANOTSUB
JMP2: JMP SUBBPART
CANOTSUB: JNB F0,TURN1
JB F0,MOVDR
JMP SUBBPART
SUBBPART: CLR C
MOV A,25H
JNB PSW.1,JMPSP1
JB ACC.7,JMPSP1
SETB ACC.7
MOV A,19H
INC A
MOV 19H,A
JMPSP1: MOV A,24H
SUBB A,19H
MOV 24H,A
MOV A,23H
SUBB A,18H
MOV 23H,A
MOV A,22H
SUBB A,17H
MOV 22H,A
ACALL SETCY_1
JB B.0,MOVDL ;除数因条件右移后左移恢复
LJMP JUDGSUB
MOVDR: SETB B.0
CLR C ;除数右移一位
MOV A,17H ;1)
RRC A
MOV 17H,A
MOV A,18H ;2)
RRC A
MOV 18H,A
MOV A,19H ;3)
RRC A
MOV 19H,A
MOV PSW.1,C ;除数末尾移出暂存至F1
ACALL SETCY_0
JMP SUBBPART
MOVDL: MOV C,PSW.1
MOV A,19H ;1)
RLC A
MOV 19H,A
MOV A,18H ;2)
RLC A
MOV 18H,A
MOV A,17H ;3)
RLC A
MOV 17H,A
CLR B.0
SETB B.1
JMP JUDGSUB
TURN1: CLR C
MOV A,25H ;1)
RLC A
MOV 25H,A
MOV A,24H ;2)
RLC A
MOV 24H,A
MOV A,23H ;3)
RLC A
MOV 23H,A
MOV A,22H ;4)
RLC A
MOV 22H,A
JB B.1,JMPCALLSC0
ACALL SETCY_0
JMPCALLSC0: CLR B.1
JMP JUDGSUB
SETCY_0: JB B.2,JMPSE1 ;B.2判断是否置1后第一次置0,是则忽略一次
INC R1 ;已计算次数计数
CLR C ;移入一位0
MOV A,35H
RLC A
MOV 35H,A ;输出地址32H-35H
MOV A,34H
RLC A
MOV 34H,A
MOV A,33H
RLC A
MOV 33H,A
MOV A,32H
RLC A
MOV 32H,A
CLR C
JMPSE1: CLR B.2
RET
SETCY_1: INC R1 ;已计算次数计数 YANG YF DESIGN
SETB C ;移入一位1
MOV A,35H
RLC A
MOV 35H,A ;输出地址32H-35H
MOV A,34H
RLC A
MOV 34H,A
MOV A,33H
RLC A
MOV 33H,A
MOV A,32H
RLC A
MOV 32H,A
CLR C
SETB B.2
RET
RESULTDIV: ;不可删 YANG YF DESIGN
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
汇编高手请进!!!
A+B=C 形式的
INPUT MACRO NUM
LOCAL NEXT1
LOCAL NEXT2
LOCAL END0
NEXT1:
LEA DX,STRING1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,30H
JL NEXT2
CMP AL,39H
JG NEXT2
JMP END0
NEXT2:
LEA DX,STRING2
MOV AH,9
INT 21H
JMP NEXT1
END0:
AND AL,0FH
MOV NUM,AL
ENDM
DATA SEGMENT
STRING1 DB 0AH,0DH,'Please input a number(0 to 9):$'
STRING2 DB 0AH,0DH,'Bad number!$'
STRING3 DB 0AH,0DH
DB 10 DUP(0)
NUM1 DB ?
NUM2 DB ?
DATA ENDS
STACK1 SEGMENT PARA STACK
BUF Db 60 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
INPUT NUM1
INPUT NUM2
CLD
LEA DI,[STRING3+2]
MOV AL,NUM1
OR AL,30H
STOSB
MOV AL,2BH
STOSB
MOV AL,NUM2
OR AL,30H
STOSB
MOV AL,3DH
STOSB
XOR AX,AX
MOV AL,NUM1
ADD AL,NUM2
AAA
PUSH AX
MOV AL,AH
TEST AL,AL
JZ NEXT
OR AL,30H
STOSB
NEXT:
POP AX
OR AL,30H
STOSB
MOV AL,24H
STOSB
LEA DX,STRING3
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
给你一个算法: 可以求一个数的近似开方平值!
1+3+5+7......2(n-1)=n的平方
所以只要用n的平方的值连续减去奇数1.3.5......2(n-1) 当减到第n+1次其差为负,则够减的次数n就是要开方的近似值! 我可能说的不是太明白,给你一段开方子程序给你参考!
mov bx,0
mov dx,1
mov ax,y ;y是要开方的数
again: sub ax,dx
jc exit ;如果不够减则结束
inc dx
inc dx
inc bx ;计数器bx
jmp again
最后求出的那个bx的值就是所要求的平方根
怎么改变sourceinsight的编码格式
有什么办法可以让source insight支持utf-8编码的源代码文件吗?
找到SI官网的解释:
Source Insight 3.x Frequently Asked Questions
Q: Does Source Insight support UNICODE files?
A: Source Insight 3.x does not yet support UNICODE files.
即,SI 3.x竟然,不支持Unicode,所以,让其支持UTF-8的梦想破灭了。
Source Insight(程序编辑器)
Source Insight(程序编辑器) v3.50.0066 官方原版+注册机 评分: 6.3
类别: 编程工具 大小:4.8M 语言: 英文
查看详细信息
不过想说的是,其在字符集,字符编码这方面的支持,也的确够垃圾的,竟然连如此通用的UTF-8编码都不支持。
3.不过,如果只是想要包含的中文等字符正常显示的话,导致找到了解决办法,那就是,将其转换为本地ANSI编码,此处即为,将UTF-8的源文件,用Notepad++转换为本地ANSI,即GB2312编码,此时,再用SI打开,就可以正常显示中文了:
而对于如果是多个文件,只是想要让其正确显示中文的话,则此处,暂时是只能通过编码转换来实现。
关于编码转换,除了用Notepad++等工具,可以使用iconv工具去转换。
iconv的使用方法为:
iconv -c -f utf-8 -t gb2312 Bl ogSohu_utf8.py BlogSohu_ansi_gb2312.py
不过,对于我来说,由于代码是Python代码,其对编码是敏感的,即不能随便转换为别的编码,否则会影响我里面的代码的执行的.
所以,不能为了用SI看代码爽,而把Python程序的编码改变了,否则导致程序无法正常执行,就得不偿失了.
因此,目前还是很悲催的,还是该为(之前一直就用的)Notepad++看Python代码吧,效果也还是不错的:
【总结】
SI中,想要UTF-8的中文字符正常显示的话,目前没有直接支持的方法。
暂时只能通过将原UTF-8的格式的文件,转换为本地ANSI编码(此处是简体中文,对应的ANSI编码为GB2312),然后再用SI打开此ANSI编码的文件,中文字符就不是乱码,就可以正常显薯团示了。
解决方案如下:
一、单个文件转换
对于单个文件,好说,只要将非ANSI码格式的文件转换成ANSI码格式即可,方法如下:
1、将文件用ultraEdit32打开,选择 文件-转换-UTF-8到ANSI, 然后保存。重新用source insight打开就好
了。
或者使用记事本打开非ANSI格式的源代码文件,另存为,在保存选项对话框中,在编码格式一栏中发现是UTF-8,选择ANSI一项,保存,再用Source Insight打开就可以正常显示中文注释了。具数禅橘体可参考百度经验的一篇文章:source insight 中文乱码的解决方案。
2、借助Linux下的iconv命令
(1)关于iconv命令的用法,可以在Linux下的终端键入iconv --help或者iconv --usage来查看
即可以使用iconv库函数(包含在glib中)和iconv命令来执行编码转换,即:
iconv -f utf-8 -t gb18030 file1.txt -o file2.txt
将袭颤utf-8编码的file1.txt文件转换成gb18030编码的file2.txt文件。
source insight 中文注释为乱码解决
(1)source insight 阅读VC++源码,注释为乱码解决方案
1、options-preferences-Syntax Formatting-Styles;
2、在Style Name 选择 Comment,再对其Font Name 选择Pick,然后再选择“新宋体”。
(2)source insight 阅读Linux源码,注释为乱码解决方案
1、用记事本打开源文件,中文可以显示,我另存为,在保存选项中,编码一栏发现是:UTF-8。我选在ANSI一项,保存。再用Source Insight 打开,终于可以显示了。
matalab神经网络工具箱中的newff.m完整的程序结构是什么样子的?
function net = newff(pr,s,tf,btf,blf,pf)
%NEWFF Create a feed-forward backpropagation network.
%
% Syntax
%
% net = newff
% net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)
%
% Description
%
% NET = NEWFF creates a new network with a dialog box.
%
% NEWFF(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) takes,
% PR - Rx2 matrix of min and max values for R input elements.
% Si - Size of ith layer, for Nl layers.
% TFi - Transfer function of ith layer, default = 'tansig'.
% BTF - Backprop network training function, default = 'trainlm'.
% BLF - Backprop weight/bias learning function, default = 'learngdm'.
% PF - Performance function, default = 'mse'.
% and returns an N layer feed-forward backprop network.
%
% The transfer functions TFi can be any differentiable transfer
% function such as TANSIG, LOGSIG, or PURELIN.
%
% The training function BTF can be any of the backprop training
% functions such as TRAINLM, TRAINBFG, TRAINRP, TRAINGD, etc.
%
% *WARNING*: TRAINLM is the default training function because it
% is very fast, but it requires a lot of memory to run. If you get
% an "out-of-memory" error when training try doing one of these:
%
% (1) Slow TRAINLM training, but reduce memory requirements, by
% setting NET.trainParam.mem_reduc to 2 or more. (See HELP TRAINLM.)
% (2) Use TRAINBFG, which is slower but more memory efficient than TRAINLM.
% (3) Use TRAINRP which is slower but more memory efficient than TRAINBFG.
%
% The learning function BLF can be either of the backpropagation
% learning functions such as LEARNGD, or LEARNGDM.
%
% The performance function can be any of the differentiable performance
% functions such as MSE or MSEREG.
%
% Examples
%
% Here is a problem consisting of inputs P and targets T that we would
% like to solve with a network.
%
% P = [0 1 2 3 4 5 6 7 8 9 10];
% T = [0 1 2 3 4 3 2 1 2 3 4];
%
% Here a two-layer feed-forward network is created. The network's
% input ranges from [0 to 10]. The first layer has five TANSIG
% neurons, the second layer has one PURELIN neuron. The TRAINLM
% network training function is to be used.
%
% net = newff([0 10],[5 1],{'tansig' 'purelin'});
%
% Here the network is simulated and its output plotted against
% the targets.
%
% Y = sim(net,P);
% plot(P,T,P,Y,'o')
%
% Here the network is trained for 50 epochs. Again the network's
% output is plotted.
%
% net.trainParam.epochs = 50;
% net = train(net,P,T);
% Y = sim(net,P);
% plot(P,T,P,Y,'o')
%
% Algorithm
%
% Feed-forward networks consist of Nl layers using the DOTPROD
% weight function, NETSUM net input function, and the specified
% transfer functions.
%
% The first layer has weights coming from the input. Each subsequent
% layer has a weight coming from the previous layer. All layers
% have biases. The last layer is the network output.
%
% Each layer's weights and biases are initialized with INITNW.
%
% Adaption is done with TRAINS which updates weights with the
% specified learning function. Training is done with the specified
% training function. Performance is measured according to the specified
% performance function.
%
% See also NEWCF, NEWELM, SIM, INIT, ADAPT, TRAIN, TRAINS
% Mark Beale, 11-31-97
% Copyright 1992-2002 The MathWorks, Inc.
% $Revision: 1.8 $
if nargin 2
net = newnet('newff');
return
end
% Defaults
if nargin 4, btf = 'trainlm'; end
if nargin 5, blf = 'learngdm'; end
if nargin 6, pf = 'mse'; end
% Error checking
if (~isa(pr,'double')) | ~isreal(pr) | (size(pr,2) ~= 2)
error('Input ranges is not a two column matrix.')
end
if any(pr(:,1) pr(:,2))
error('Input ranges has values in the second column larger in the values in the same row of the first column.')
end
if isa(s,'cell')
if (size(s,1) ~= 1)
error('Layer sizes is not a row vector of positive integers.')
end
for i=1:length(s)
si = s{i};
if ~isa(si,'double') | ~isreal(si) | any(size(si) ~= 1) | any(si1) | any(round(si) ~= si)
error('Layer sizes is not a row vector of positive integers.')
end
end
s = cell2mat(s);
end
if (~isa(s,'double')) | ~isreal(s) | (size(s,1) ~= 1) | any(s1) | any(round(s) ~= s)
error('Layer sizes is not a row vector of positive integers.')
end
% More defaults
Nl = length(s);
if nargin 3, tf = {'tansig'}; tf = [tf(ones(1,Nl))]; end
% Architecture
net = network(1,Nl);
net.biasConnect = ones(Nl,1);
net.inputConnect(1,1) = 1;
[j,i] = meshgrid(1:Nl,1:Nl);
net.layerConnect = (j == (i-1));
net.outputConnect(Nl) = 1;
net.targetConnect(Nl) = 1;
% Simulation
net.inputs{1}.range = pr;
for i=1:Nl
net.layers{i}.size = s(i);
net.layers{i}.transferFcn = tf{i};
end
% Performance
net.performFcn = pf;
% Adaption
net.adaptfcn = 'trains';
net.inputWeights{1,1}.learnFcn = blf;
for i=1:Nl
net.biases{i}.learnFcn = blf;
net.layerWeights{i,:}.learnFcn = blf;
end
% Training
net.trainfcn = btf;
% Initialization
net.initFcn = 'initlay';
for i=1:Nl
net.layers{i}.initFcn = 'initnw';
end
net = init(net);
Windows批处理-for命令详解
摘自Windows XP的帮助文档。
For对一组文件中的每个文件运行指定的命令。
语法
for {%variable|%%variable} in (set) do command [ CommandLineOptions]
参数
{%variable|%%variable}
必需。代表可替换的参数。使用 %variable 通过命令提示符执行 for 命令。使用 %%variable 在批处理文件中执行 for 命令。变量要区分大小写,并且必须用 Alpha 值表示,例如,%A、%B 或 %C。
(set)
必需。指定要用判弊指定命令处理的一个或多个文件、目录、数值范围以及文本字符串。需要括号。
command
必需。指定要对包括在指定 (set) 中的每个文件、目录、数值范围以及文本字符串所执行的命令。
CommandLineOptions
指定要通过指定命令使用的任何命令行选项。
/?
在命令提示符显示帮助。
注释
使用 for
可以在批处理文件中或直接从命令提示符使用 for 命令。
使用批处理参数
下列属性适用于 for 命令:
for 命令使用指定 set 中的每个文本字符串替换 %variable 或 %%variable,直到 command 处理所有文件为止。
记住,for variable名是区分大小写、全局的,并且每次总共不超过 52 个是活动的。
要避免批处理罩冲扰参数从 %0 到 %9 混淆,对 variable 可以使用除数字 0 到 9 之外的任何字符。对于简单的批处理文件,单个字符即可奏效,例如 %%f。
在复杂的批处理文件中可以使用 variable 的多个值来区分不同的可替换变量。
显示一组文件
set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令时,set 中的第一个值代替 %variable 或 %%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。
使用 in 和 do 关键字
In 和 do 不是参数,但必须将它们与 for 一起使用。如果省略其中任何一个关键字,就会出现错误消息。
使用 for 的其它形式
如果命令扩展名处于启用状态(即,默认设置),则支持 for 的下列其它形式:
仅为目录
如果 set 包含通配符(* 和 ?),则为匹配 set 的每个目录(而不是指定目录中的文件组)而执行指定的 command。语法是:
for /D {%% | %}variable in (set) do command [CommandLineOptions]
递归
进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.),则只列举目录树。语法是:
for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]
重复数值范围
使用迭代变量设置起始值 (start#) ,然后一步步执行一系列设置范围的值,直到该值超过设置的终止值 (end#)。/L 将通过对 start# 与 end# 进行比较,执行迭代物旦变量。如果 start# 小于 end#,就会执行该命令。如果迭代变量超过 end#,则命令解释程序退出此循环。也可以使用负 step# 以递减数值的方式一步步执行此范围内的值。例如,(1,1,5) 生成顺序 1 2 3 4 5,而 (5,-1,1) 则生成顺序 (5 4 3 2 1)。语法是:
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
重复和文件解析
使用文件解析过程处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,以及使用各种 ParsingKeywords 选项进一步修改解析方式。使用 ParsingKeywords 令牌选项指定哪些令牌应该传递为迭代程序变量。注意:在没有使用令牌选项时,/F 将仅检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容、分成独立的文本行及然后将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代程序变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。语法的不同点为:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。要覆盖默认解析行为,指定 "ParsingKeywords"。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。
如果使用 usebackq 选项,请使用如下语法之一:
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
下表列出可以用于 ParsingKeywords 的解析关键字。
关键字 说明
eol=c 指定行尾字符(只一个字符)。
skip=n 指定在文件的开头跳过的行数。
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n 指定将哪些令牌从每行传递到每个迭代的 for 正文。结果就分配了附加变量名称。m-n 格式是一个范围,指定从 mth 到 nth 的令牌。如果 tokens=字符串中最后一个字符是星号 (*),则将分配附加的变量,并在解析的最后一个令牌后在行上接收剩余的文本。
usebackq 指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有单引号的字符串是文字字符串命令。
变量替换
已经增强了 for 变量引用的替换修改程序。下表列出可选语法(对于任意变量 I)。
带有修改程序的变量 说明
%~I 展开删除任何前后引号 ("") 的 %I。
%~fI 将 %I 展开到完全合格的路径名。
%~dI 只将 %I 展开到驱动器号。
%~pI 只将 %I 展开到路径。
%~nI 只将 %I 展开到文件名 。
%~xI 只将 %I 展开到文件扩展名。
%~sI 展开路径以只包含短名称。
%~aI 将 %I 展开到文件的文件属性。
%~tI 将 %I 展开到文件的日期和时间。
%~zI 将 %I 展开到文件大小。
%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开到第一个找到的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改程序扩展成空字符串。
下表列出可用来获得综合结果的修改程序组合。
变量(使用组合的修改程序) 说明
%~dpI 只将 %I 展开到驱动器号和路径。
%~nxI 只将 %I 展开到文件名和扩展名。
%~fsI 将 %I 展开到只包含短名称的完整路径名。
%~dp$PATH:I 在 PATH 环境变量中所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径。
%~ftzaI 将 %I 展开到输出行(如 dir一样)。
在上述范例中,可以用其它有效值替换 %I 和 PATH。有效的 for 变量名终止 %~ syntax。
使用大写变量名(例如 %I),可以使代码更具可读性,并且避免与不区分大小写的修改程序混淆。
解析字符串
通过将 Filenameset 包括在圆括号内,并且外面再带上单引号(即,'filenameset'),可以使用 for /F 对直接字符串解析逻辑。将 Filenameset 视为从某个文件输入的单行,然后接受解析。
解析输出
通过将圆括号之间的 filenameset 变为后面带有引号的字符串,可以利用 for /F 命令解析命令输出。将它作为命令行,此命令被传递给子 Cmd.exe,并将输出捕获到内存并进行解析,就象它是一个文件一样。
范例
要在批处理文件中使用 for,请使用以下语法:
for %%variable in (set) do command [CommandLineOptions]
要通过使用可替换变量 %f 显示当前目录中扩展名为 .doc 或 .txt 的所有文件的内容,请键入:
for %f in (*.doc *.txt) do type %f
在前述范例中,当前目录中扩展名为 .doc 或 .txt 的每个文件都被替代为变量 %f ,直到每个文件的内容都显示为止。要在批处理文件中使用该命令,只需使用 %%f 替换 %f 的每个事件。否则忽略此变量,并显示一条错误消息。
要解析文件,同时忽略注释行,请键入:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
这个命令解析 myfile.txt 文件的每一行,忽略以分号开头的行,将第二和第三个令牌从各行传递到 FOR 正文(令牌通过逗号或空格分隔)中。FOR 语句的正文引用 %i 以获得第二个令牌,引用 %j 以获得第三个令牌,引用 %k 以获得其余全部令牌。如果您提供的文件名包含空格,请使用引号将文本引起来(例如,"File Name")。要使用引号,必须使用 usebackq。否则,就将引号解释为定义要解析的文字字符串。
要通过将 filenameset 放在括号之间来解析命令输出,请键入:
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
这个范例列举当前环境中的环境变量名。
KTR-SI,SYNTEX的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、KTR-SI,SYNTEX的信息别忘了在本站进行查找喔。