中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-17 20:05
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 批处理命令-----Shift的用法! 查看 9,370 回复 24
16 发表于 2008-02-11 14:54 ·  中国 辽宁 铁岭 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
UID 107722
性别 男
来自 烟台
状态 离线
谢谢你们,我懂了
路 是自己选的
学习 是为了具备解决问题的能力
17 发表于 2008-02-11 14:58 ·  中国 辽宁 铁岭 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
UID 107722
性别 男
来自 烟台
状态 离线
更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关
命令从第 n 个参数开始移位;n 介于零和八之间。例如:

SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

跟33楼的抛位差不多一个意思

shift /n
用第n+1个参数代替第n个参数的位置
后续参数同上
路 是自己选的
学习 是为了具备解决问题的能力
18 发表于 2008-02-19 15:51 ·  中国 广东 深圳 电信
中级用户
★★
积分 396
发帖 183
注册 2007-12-23 06:24
UID 106531
性别 男
状态 离线
利用SHIFT /数字来移位显示到移位之后的数字,有意思
19 发表于 2008-06-26 09:22 ·  中国 江西 南昌 电信
初级用户
积分 48
发帖 19
注册 2008-04-16 19:57
UID 116095
性别 男
状态 离线
Originally posted by guxingyibei at 2007-7-11 11:52 AM:
知道用法,但是实际中见的很少!不知道在哪里用


范例
以下批处理文件 Mycopy.bat 显示了如何使用包含任意数目批处理参数的 shift 命令。该批处理文件将一列文件复制到特定的目录。批处理参数由目录和文件名参数表示。

@echo off
rem MYCOPY.BAT copies any number of files
rem to a directory.
rem The command uses the following syntax:
rem mycopy dir file1 file2 ...
set todir=%1
:getfile
shift
if "%1"=="" goto end
copy %1 %todir%
goto getfile
:end
set todir=
echo All done
20 发表于 2008-06-26 10:54 ·  中国 上海 东方有线
贫困用户
积分 -5
发帖 11
注册 2008-06-24 12:00
UID 120760
性别 男
状态 离线
===b.bat===
@call a.bat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

===a.bat===
@echo off&cls
shift /3 ==>第3个参数3被去掉,于是传入的就是 1 2 4 5 6 7 8 9 10
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /4 ==>在上面剩余参数的基础上,再去掉第4个参数5,于是传入的就是 1 2 4 6 7 8 9 10 11
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /5 ==>在上面剩余参数的基础上,再去掉第5个参数7,于是传入的就是 1 2 4 6 8 9 10 11 12
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
21 发表于 2008-08-17 11:16 ·  中国 广西 玉林 电信
初级用户
★★
积分 108
发帖 56
注册 2008-08-11 14:42
UID 123179
性别 男
状态 离线
maple 不是内部命令?
22 发表于 2008-09-15 22:30 ·  中国 广东 东莞 电信
初级用户
积分 20
发帖 10
注册 2008-09-14 00:31
UID 125594
性别 男
状态 离线
shift /0 时,参数从第零位数开始左移一位,结果为:2,3,4,5,6,7,8,9,10
shift /1 时,参数从第一位数开始左移一位,结果为:3,4,5,6,7,8,9,10,11
shift /2 时,参数从第二位数开始左移一位,结果为:3,5,6,7,8,9,10,11,12
shift /3 时,参数从第三位数开始左移一位,结果为:3,5,7,8,9,10,11,12,13
shift /4 时,参数从第四位数开始左移一位,结果为:3,5,7,9,10,11,12,13,14
shift /5 时,参数从第五位数开始左移一位,结果为:3,5,7,9,11,12,13,14,15
下面也就依次类推下去就OK了
看明白了吧。
23 发表于 2008-09-15 22:41 ·  中国 广东 东莞 电信
初级用户
积分 20
发帖 10
注册 2008-09-14 00:31
UID 125594
性别 男
状态 离线
以上方法有点傻,一个比较理解的简单办法
SHIFT /N 也就是在目前有效值范围内去掉N(N=1,2,3,4.....)位置的数,就OK了。(N=0=1,明白吗?)
24 哈哈 发表于 2010-01-08 14:45 ·  中国 上海 青浦区 电信
新手上路
积分 5
发帖 3
注册 2009-12-19 06:02
UID 156907
性别 男
状态 离线
看了半天,从懂到不懂,又从不懂到懂。呵呵,总算清楚了。
就是去掉第N个,由后面的补上来。但是,并不影响最前面两个。
25 发表于 2010-03-08 12:22 ·  中国 江苏 盐城 东台市 电信
初级用户
积分 26
发帖 14
注册 2010-03-03 15:31
UID 161508
性别 男
来自 江苏盐城
状态 离线
学习了啊
论坛跳转: