中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 10:30
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]替换变量随机位置的字符为空格 查看 1,859 回复 15
楼 主 [已结]替换变量随机位置的字符为空格 发表于 2008-05-06 17:12 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
如题。。。
var=abcdefghijk

输出后是a cde gh jk

随机位置 但字符位置不变。。。c还是在第三位~


@echo off&setlocal enabledelayedexpansion
set var=abcdefghijk
set n=-1
:lp
set /a n+=1
call,set str=%%var:~%n%,1%%
if defined str (
if "!n!" equ "!random:~2,1!" set "str= "
set pus=!pus!!str!
goto :lp
)
echo %pus%
pause


[ Last edited by pusofalse on 2008-5-6 at 05:44 PM ]
2 发表于 2008-05-06 17:48 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
随机数会生成麽?

set帮助里的字符截取会麽?
3 发表于 2008-05-06 17:51 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
已结了?
不过你的代码结果真的是你想要的麽?
4 我先给出一个空格的代码吧: 发表于 2008-05-06 17:52 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@echo off
set str=abcdefghijk
set /a a=%random%%%10
call,set var=%%str:~%a%,1%%
call,set str=%%str:%var%= %%
echo %str%
pause>nul


[ Last edited by zw19750516 on 2008-5-6 at 05:55 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +2 2008-05-06 18:02
批处理之家新域名:www.bathome.net
5 发表于 2008-05-06 18:03 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
Originally posted by zw19750516 at 2008-5-6 05:52 PM:

@echo off
set str=abcdefghijk
set /a a=%random%%%10
call,set var=%%str:~%a%,1%%
call,set str=%%str:%var%= %%
echo %str%
pause>nul


[ Last edited by zw19750516 on 2008-5 ...


还是你这好些~ 谢了!
6 发表于 2008-05-06 18:10 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@echo off
set str=ss有重复结果就...sss
set /a a=%random%%%14
call,set var=%%str:~%a%,1%%
call,set str=%%str:%var%= %%
echo %str%
pause>nul
7 发表于 2008-05-06 18:22 ·  中国 广西 南宁 电信
中级用户
★★
丶杏灬丶
积分 280
发帖 105
注册 2008-05-06 03:37
18年会员
UID 117858
性别 男
来自 广西
状态 离线
还可以
8 楼上的同学~~ 发表于 2008-05-06 19:10 ·  中国 广西 南宁 电信
中级用户
★★
丶杏灬丶
积分 280
发帖 105
注册 2008-05-06 03:37
18年会员
UID 117858
性别 男
来自 广西
状态 离线
call,set......中"call,"的作用是什么呀
9 发表于 2008-05-06 19:15 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
类似于变量延迟的作用,在论坛有详细说明的,请搜索之。
批处理之家新域名:www.bathome.net
10 发表于 2008-05-06 22:18 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
“call,set......”用“call set......”更好理解
11 发表于 2008-05-07 09:15 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
4楼的代码中,如果字符有重复的那就达不到随机的效果了,
12 发表于 2008-05-07 10:52 ·  中国 广西 南宁 电信
中级用户
★★
丶杏灬丶
积分 280
发帖 105
注册 2008-05-06 03:37
18年会员
UID 117858
性别 男
来自 广西
状态 离线
理论上有重复的也可以的呀~~楼上的大哥说说重复的为什么就不可能随机插入了呢~~
13 发表于 2008-05-07 11:02 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
如果字符串是 afefeav
你本想替换的是v前面的a,可是替换的时候将第一个a也替换了,
14 这样就不怕重复字符了: 发表于 2008-05-07 15:45 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off&setlocal enabledelayedexpansion
set str=aaaaaaaaaa
set n=0&set m=0&set x=0
:set
set /a a=%random%%%10+1
for %%i in (%code%) do if %%i equ %a% goto set
set /a x+=1&set code=%code% %a%
if %x% lss 3 goto set
:lp
set /a n+=1
for %%i in (%code%) do if %%i equ %n% set m=1
if %m% equ 0 (
set var=!var!%str:~,1%
) else (
set "var=!var! "
)
set str=%str:~1%&set m=0
if defined str goto lp
echo !var!
pause>nul


[ Last edited by zw19750516 on 2008-5-7 at 03:46 PM ]
批处理之家新域名:www.bathome.net
15 发表于 2008-05-08 02:19 ·  中国 广东 佛山 禅城区 电信
初级用户
积分 87
发帖 42
注册 2008-05-07 23:37
18年会员
UID 118057
性别 男
状态 离线
强啊,又学到东西啦,
论坛跳转: