返回列表 发帖

第一题

echo off
:cc
set ee=
setlocal enabledelayedexpansion
set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
set num=0
:aa
set /a num+=1
set /a c=%random%%%10+0
for /f "tokens=1-10 delims= " %%0 in ("%var%") do set "ff=%%%c%"
if !num!==11 goto dd
set "ee=!ee!!ff!"
goto aa
:dd
set /a nm+=1
echo !ee!>>a.txt
if !nm!==10 goto mm
goto cc
:mm
pauseCOPY
学海无涯

TOP

楼上直接指点吧

我新手,写代码难免有问题的,你是感觉我哪些地方用的不对吗?
学海无涯

TOP

第二题

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (b.txt) do set "d=%%i" & call :treat
pause>nul
:treat
set m=0
set "y="
:cc
set "e=!d:~%m%,6!"
set "x=!d:~%m%,1!"
set /a m+=1
if "!e!"=="ABDEFG" set /a m-=1 & call set "y=%%d:!d:~%m%,6!=bathome%%" & set /a m+=1
if "!x!"=="" goto dd
goto cc
:dd
if "!y!"=="" (echo !d!>>bb.txt) else echo !y!>>bb.txt
goto :eofCOPY
学海无涯

TOP

关于echo %com%的问题

http://bbs.bathome.net/viewthrea ... amp;page=1#pid29527
当我还是个新手的时候就测试过这个问题了,尽管现在我还是新手,可惜当时就一个人指点明白了我当时的疑惑

作为直接取值如echo %%1 %%2 %%3必须是双%

但是作为变量赋值后的调用,赋值必须是单%

还有一个问题是echo %com% 的双%,尽管开启了变量延迟setlocal enabledelayedexpansion,但是我测试发现echo !com!这样的方式是错误的,只能echo %com%,至于为什么还有待高手指点
学海无涯

TOP

回复 58楼 的帖子

感谢指正!为什么要省去"delims= "这个呢?恩,还有个概念我有些模糊,就是开启延迟的时候,如何区分用!!还是%%

55楼的我测试的时候,是指定的b.txt    最后生成的是bb.txt    ,应该改成a.txt  生成 b.txt就对了

我是新手还望能多多指点
学海无涯

TOP

回复 60楼 的帖子

当时测试是没问题的,今天才发现最后重复了最后一行,现在想了半天了,也没想明白原因,我再想想
学海无涯

TOP

给我的感觉好像for在处理文本的时候总是预读一行,到最后一行它仍然预读下一行,结果下一行是空的,它就终止,可是我这个代码到最后那个if仍然满足条件结果就又重新指定了一遍了,是不是这个原因?
学海无涯

TOP

重写了个思路,为什么会出空格?

请大家给看看,指点一下
@echo off
del b.txt
setlocal enabledelayedexpansion
set var=bathome
for /f "delims=" %%i in (a.txt) do set "d=%%i" & call :treat
pause>nul & goto :eof
:treat
set m=0
:cc
set "f=!d:~%m%,1!"
set "e=!d:~%m%,6!"
if "%f%"=="" echo.>>b.txt & goto :eof
if "%e%"=="ABDEFG" (set/p=%var%<nul>>b.txt & set /a m+=5) else (set/p=%f%<nul>>b.txt)
set /a m+=1
goto ccCOPY


已经找到原因了,这样就好了 set/p=%var%<nul>>b.txt& set  /a m+=5
但是不明白为什么要把set/p=%var%<nul>>b.txt&这个&前面的空格去了才是对了,我以前总以为什么空开就是对的。。。。
学海无涯

TOP

返回列表