Board logo

标题: [已结]替换变量随机位置的字符为空格 [打印本页]

作者: pusofalse     时间: 2008-5-6 17:12    标题: [已结]替换变量随机位置的字符为空格

如题。。。
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 ]
作者: slore     时间: 2008-5-6 17:48
随机数会生成麽?

set帮助里的字符截取会麽?
作者: slore     时间: 2008-5-6 17:51
已结了?
不过你的代码结果真的是你想要的麽?
作者: bat-zw     时间: 2008-5-6 17:52    标题: 我先给出一个空格的代码吧:


@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 ]
作者: pusofalse     时间: 2008-5-6 18:03


  Quote:
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 ...

还是你这好些~ 谢了!
作者: slore     时间: 2008-5-6 18:10
@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
作者: joyn     时间: 2008-5-6 18:22
还可以
作者: joyn     时间: 2008-5-6 19:10    标题: 楼上的同学~~

call,set......中"call,"的作用是什么呀
作者: bat-zw     时间: 2008-5-6 19:15
类似于变量延迟的作用,在论坛有详细说明的,请搜索之。
作者: zh159     时间: 2008-5-6 22:18
“call,set......”用“call set......”更好理解
作者: huahua0919     时间: 2008-5-7 09:15
4楼的代码中,如果字符有重复的那就达不到随机的效果了,
作者: joyn     时间: 2008-5-7 10:52
理论上有重复的也可以的呀~~楼上的大哥说说重复的为什么就不可能随机插入了呢~~
作者: huahua0919     时间: 2008-5-7 11:02
如果字符串是  afefeav
你本想替换的是v前面的a,可是替换的时候将第一个a也替换了,
作者: bat-zw     时间: 2008-5-7 15:45    标题: 这样就不怕重复字符了:


@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 ]
作者: youling126     时间: 2008-5-8 02:19
强啊,又学到东西啦,
作者: 26933062     时间: 2008-5-8 10:13
如果已知变量有多少位的话,没那么复杂。。。
:
@echo off
set str=aabbeaefhh
set /a w=%random%%%10+1,n=w-1
call echo "%%str:~0,%n%%% %%str:~%w%%%"
pause