标题: 批处理创建100个文件名不含5的文件夹 [打印本页]
作者: youxi01 时间: 2008-1-3 23:08 标题: 批处理创建100个文件名不含5的文件夹
说明:题目出自随风
如题:
创建100个文件夹,文件名不能含有5字.
就是说创建100个文件夹.文件夹的名字中不能含有5字.
而且必须是100个,不能多也不能少.
要求:
代码越简洁越好.
方法不限,高效,简洁为最佳答案.....
作者: zhangxiaopeng 时间: 2008-4-3 22:38
没有人回答吗。。。管理员应该公布一下自己的想法呀。。。
作者: mggdx 时间: 2008-4-13 17:18
- for /l %%i in (2,2,200) do md d:\1\%%i
复制代码
作者: 随风 时间: 2008-4-13 22:15 标题: 回复 3楼 的帖子
会出现 50 52 54 。。。。。150 152 154 156 。。。。。。。。
作者: mggdx 时间: 2008-4-16 08:52
不好意思 忽视了这个问题了
作者: pusofalse 时间: 2008-4-17 21:39
for /l %%a in (1 1 121) do md %%a
ping /n 4 127.1>nul
for /f "tokens=*" %%a in ('dir /b ^| find "5"') do rd %%a
作者: youxi01 时间: 2008-4-17 21:45
偶数行的固然能够解决问题,但是效率不是最高的...
作者: 梦想种子 时间: 2008-4-20 21:37
- @echo off
- setlocal enabledelayedexpansion
- :loop
- set a=!random:5=!
- if not defined !a! (
- set !a!=a&md !a!
- set /a c+=1
- if !c! lss 100 goto loop)
复制代码
应该还有更简洁更高效的。
作者: 梦想种子 时间: 2008-4-20 21:52
- @echo off
- :0
- set /a c+=1
- :1
- call md %random:5=%0
- if %c% equ 100 exit
- goto %errorlevel%
复制代码
这个似乎好些了。
作者: 随风 时间: 2008-4-20 22:06
呵呵,看似容易。。作起来也费脑筋啊。。。
目前最简洁,最高效的代码是 49字节,并且不能省略屏蔽命令回显功能。
作者: 梦想种子 时间: 2008-4-20 23:18
49字节...真的很难。是用到for命令么?
不如让大伙学习一下吧。
暂时想到最简的是下面这个。- :0
- @md %random:5=%0&&set/ac+=1,a=c/100
- @goto %a%
- :1
复制代码
[ 本帖最后由 梦想种子 于 2008-4-20 23:51 编辑 ]
作者: youxi01 时间: 2008-4-20 23:46
随风兄的代码指的是这个么?- for /l %%i in (1 1 100) do call md %%random:5=%%
复制代码
作者: 梦想种子 时间: 2008-4-20 23:55
嗯。加了@之后就刚好49字节。
不过这有两个未妥的地方。
1、若随机数为5555,文件夹名为空,出错。
2、若随机数出现类似1053和1503等数,就会缺建文件夹。
作者: 随风 时间: 2008-4-21 16:37 标题: 回复 12楼 的帖子
13 楼 梦想种子 说的对,
并且加了@符号后就不止 49 字节了,
还有就是上面的代码的效率不够高。。
创建100个不含5的文件夹
算得上简洁,高效的代码,至少有三个. 长度分别是:78字节,62字节,49字节。
大家再想想,其实只是个思路问题,与bat技术水平没多大关系。。。
呵呵。。
娱乐。。。。。
[ 本帖最后由 随风 于 2008-4-21 19:13 编辑 ]
作者: bater 时间: 2008-9-11 13:30
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1 1 100) do (
set b=%%a
md !b:5=v!
)
[ 本帖最后由 bater 于 2008-9-11 14:50 编辑 ]
作者: bater 时间: 2008-9-11 22:28
原帖由 mggdx 于 2008-4-13 17:18 发表
for /l %%i in (2,2,200) do md d:\1\%%i
楼主这个方案有个小缺陷,你用excle拉一下就会发现154,156,158在里面
作者: bater 时间: 2008-9-12 12:14 标题: 56个字节
- :l
- @set /a c+=1
- @if %c% lss 100 (@ md %c:5=v%
- goto l)
复制代码
[ 本帖最后由 bater 于 2008-9-12 15:40 编辑 ]
作者: wxcute 时间: 2008-9-15 13:19
- @echo off
- for /f "delims=5" %%d in ('dir/a/b %windir%') do call :mdir "%%d"
- :mdir
- if #%n%==#100 goto :eof
- md "%~n1"&&set/a n+=1
复制代码
作者: z_berry 时间: 2008-9-23 14:14
- @echo off
- setlocal enabledelayedexpansion
- echo 统计结果>ret.txt
- for /L %%i in (0,1,9) do (
- for /L %%a in (0,1,9) do (
- set /a tp1=%%i
- set /a tp2=%%a
- if %%i equ 5 set /a tp1=10
- if %%a equ 5 set /a tp2=10
- mkdir !tp1!!tp2!
- )
- )
- pause>nul
复制代码
两重循环,把5随便替换成一个别的数就行了吧
作者: 随风 时间: 2008-10-23 22:46
这么久了,还没有最佳答案,公布吧。。
创建100个文件名不含 5 的文件夹
算得上简洁,高效的代码,至少有三个.
一. 常用的for嵌套: 长度:78 字节,效率:循环100次。- @set a=0 1 2 3 4 6 7 8 9 a
- @for %%a in (%a%)do @for %%b in (%a%)do @md %%a%%b
复制代码
二. 用两个for的简洁代码:长度:62 字节,效率不变,仍是循环 100 次。- @for /l %%a in (2,2,20)do @for /l %%b in (2,2,20)do @md %%a%%b
复制代码
三. 用一个for代码更简洁,且更高效: 长度:49 字节,效率:循环:25 次。- @for /l %%a in (0,2,48)do @md %%aa %%ab %%ac %%ad
复制代码
作者: pengyou86 时间: 2008-10-25 10:47
谢谢 我收藏了
作者: loveruixue 时间: 2008-10-31 18:18
学习!!!!!!!!!!!!!!!!!!!!
[ 本帖最后由 loveruixue 于 2008-10-31 18:21 编辑 ]
作者: firewolf85 时间: 2008-12-8 11:25
- @echo off&
- set head=1abcdefghij
- for /l %%m in (1 1 10) do (
- for /l %%n in (1 1 10) do (
- call md %%head:~%%m,1%%%%head:~%%n,1%%
- )
- )
- pause>nul
复制代码
作者: hkmhd 时间: 2008-12-9 15:28
囧~都是替换法,如果想要做一个以1开始,遇到5就略过然后继续往下的又要怎么弄
作者: keen 时间: 2009-3-30 23:55
自己感觉都不是批处理了。
- @echo off
- for /l %%i in (1 1 121) do md %%i
- for /l %%j in (50 1 59) do rd %%j
- for /l %%k in (5 10 115) do rd %%k
复制代码
作者: cainiao736 时间: 2009-3-31 20:53
- @echo off&setlocal enabledelayedexpansion
- set n=0
- for /l %%i in (1,1,200) do (
- echo %%i|findstr 5||rd %%i&&set /a n+=1
- if !n!==100 goto eof )
- :eof
- pause>nul
复制代码
作者: tyc 时间: 2009-4-1 11:13 标题: try
@echo off&setlocal enableDelayedExpansion
for /l %%i in (1,1,100) do md !random:5=!
pause>nul
作者: Lumiere 时间: 2009-4-1 13:52
@echo off
for /l %%a in (1 1 4) do (
for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y) do md %%a%%b
)
pause
作者: Lumiere 时间: 2009-4-1 13:57
@echo off
for /l %%a in (1 1 4) do (
for %%b in (a b c d e) do (
for %%c in (f g h i j) do md %%a%%b%%c
)
)
pause
作者: Lumiere 时间: 2009-4-1 14:00
超级斑竹的代码果然是妙,佩服!
作者: Lumiere 时间: 2009-4-1 14:20
- @for /l %%a in (1 1 100) do (
- call set b=%%a
- call md %%b:5=v%%
- )
复制代码
作者: hs4814 时间: 2009-8-10 13:02
- @echo off
- for /l %%i in (1 1 100) do ( if %%i neq 5 md %%i\)
- pause>nul
复制代码
作者: januapr 时间: 2009-8-13 09:51
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,100) do (
- set var=%%i
- md !var:5=a!
- )
- pause
复制代码
我也写了一个,不过回头看了一下别人的,感觉还是老大的简洁!
作者: wangshuping42 时间: 2009-8-22 07:16
- @echo off
- for /l %%i in (1,1,121) do md %%i
- rd *5 /s /q
- rd 5* /s /q
- pause>nul
复制代码
作者: DXSX 时间: 2009-8-26 12:55
如果规定 这100个文件名字 必须随机呢?加大一下难度吧。
利用FIND 确定随机数是否包含5,同时还要用 EXIST 判断文件夹是否已经建立了。- @echo off
- set /a m=1
- :loop
- set name=%random%
- echo %name%|find "5" >nul
- if not errorlevel 1 (
- goto loop ) else (
- if not exist %name%\nul (
- echo 创建第%m%个随机目录 -- %name%
- md %name%
- set /a m=%m%+1
- )
- )
- if %m% equ 101 goto end
- goto loop
- :end
- PAUSE
复制代码
作者: Seter 时间: 2009-8-26 13:15
- :l
- @set n=%n%a&set/ai+=1
- @md %n%&goto l%i:~2,1%
复制代码
如何?同样49B
只对应楼主出的题目...
[ 本帖最后由 Seter 于 2009-9-19 15:06 编辑 ]
作者: Seter 时间: 2009-9-19 14:35
昏迷...当时脑子一热打成49K了...
而且当时脑子一热忘记改了- :l
- @set n=%n%a
- @md %n%&goto l%n:~99%
复制代码
38B,一个回车有俩字节,如果用其他编辑软件的话可以35B呢 ^__^
刚发现还有更拽的- @set k= %1a
- @%0%k:~100%%k%&md%k%
复制代码
33B
[ 本帖最后由 Seter 于 2009-9-19 15:09 编辑 ]
作者: xiaoyu19921013 时间: 2009-9-28 23:48
呵呵 。 很有意思
作者: dominater 时间: 2009-10-12 23:55
- @echo off
- for /l %%i in (2 2 200) do md %%i
- pause
复制代码
作者: 随风 时间: 2009-10-13 01:01
原帖由 dominater 于 2009-10-12 23:55 发表
@echo off
for /l %%i in (2 2 200) do md %%i
pause
会出现50、150
作者: 随风 时间: 2009-10-13 01:04
原帖由 Seter 于 2009-9-19 14:35 发表
昏迷...当时脑子一热打成49K了...
而且当时脑子一热忘记改了:l
@set n=%n%a
@md %n%&goto l%n:~99%38B,一个回车有俩字节,如果用其他编辑软件的话可以35B呢 ^__^
刚发现还有更拽的@set k= %1a
@%0%k:~100%%k%&md ...
难道不会死循环?
作者: 随风 时间: 2009-10-13 01:08 标题: 回复 36楼 的帖子
goto l%i:~2,1% 改为 goto l%i:~2% 岂不是更好
作者: 523066680 时间: 2009-10-13 08:18
如果可以直接5进制一下的输出,就没有5拉~
而且用10个字母for两层也成了
[ 本帖最后由 523066680 于 2009-10-13 08:44 编辑 ]
作者: samble 时间: 2009-10-15 22:17
原帖由 随风 于 2008-10-23 22:46 发表
三. 用一个for代码更简洁,且更高效: 长度:49 字节,效率:循环:25 次。 复制内容到剪贴板
代码for /l %%a in (0,2,48)do @md %%aa %%ab %%ac %%ad
随风 这个例子真是经典。将100四分法。好思路。学习了。
依照这个思路,还可以再细分提高效率,只循环10次,不过代码多了点。如:-
- @for /l %%a in (2,2,20)do @md %%aa %%ab %%ac %%ad %%ae %%af %%ag %%ah %%ai %%aj
复制代码
[ 本帖最后由 samble 于 2009-10-15 22:19 编辑 ]
作者: zcydez 时间: 2009-10-18 12:51
@echo off
set e=0
:a
if %e% equ 100 exit
set a=%time:~-1%
set b=%time:~9,1%
set c=%time:~7,1%
ping -n 1 127.0.1>nul
if %a% neq 5 (goto b) else (goto a)
:b
if %b% neq 5 (goto c) else (goto a)
:c
if %c% neq 5 (goto d) else (goto a)
:d
if exist %a%%b%%c% (goto a) else (echo.正在创建:%a%%b%%c%&md %a%%b%%c%)
set /a e=%e%+1
goto a
[ 本帖最后由 zcydez 于 2010-1-27 14:16 编辑 ]
作者: poxi 时间: 2010-7-19 21:47
答:
这个ms可以...
- @echo off
- :1
- set /a js+=1
- set a=%a%a
- md %a%
- if not %js% equ 100 goto 1
复制代码
============
作者: solid 时间: 2010-7-27 20:45
@echo off &setlocal enabledelayedexpansion
set an=0,1,2,3,4,6,7,8,9
set num=0
for %%a in ( %an% ) do (
for %%b in ( %an% ) do (
for %%c in ( %an% ) do (
md %%a%%b%%c
set /a num+=1
if "!num!"=="100" exit
)))
作者: wc726842270 时间: 2010-7-30 19:34
@echo off
for /l %%i in (1 1 4) do (for /l %%j in (0 1 4) do (for
/l %%k in (0 1 4) do (md %%i%%j%%k)))
pause
作者: fish 时间: 2010-8-6 19:25 标题: 不知道文件名是否能长长的。。。
如果可以长长的可以用这个长长的代码:- for /l %%i in (1,1,100) do call set d=%%d%%1&call md %%d%%
复制代码
如果不可以长长的可以用这个不长长的代码:- for /l %%i in (1,1,100) do (
- if %%i lss 50 (
- call set d=%%d%%1&call md %%d%%
- ) else (
- call set e=%%e%%2&call md %%e%%
- )
- )
复制代码
总之,办法总是会有的嘛。。。
作者: leap 时间: 2010-9-2 11:24
我的认为
随机一个数字
判断是否含有5
没有就建立该数字的文件夹
有就重新随机一个一个数字
语句执行100次
这样可以吗 谁知道这样怎么写代码,请教诸位大大
作者: fish 时间: 2010-9-12 22:52 标题: 回复 51楼 的帖子
前辈的想法确实很好啊,不过好像前辈没看其他前辈的答案吧,其他前辈的答案已经有您的这种算法了,现在楼主前辈寻找的是高效简洁复杂度最低的算法,所以这题确实难啊,等晚辈好好复习完数据结构后再试试吧,前辈您也要加油哦。
作者: netbenton 时间: 2010-9-13 22:22
在 37 楼的基础上再少两个字节。(31B)
- @set/aa+=1
- @md %a:5=a%&%a:~2%%0
复制代码
[ 本帖最后由 netbenton 于 2010-9-13 22:24 编辑 ]
作者: robertmiko 时间: 2010-9-14 18:23 标题: 新人报到IP与MAC收集更新
这代码对比更新不行请指教
@echo off
if exist c:\mac.ini goto up
for /l %%a in (1,1,254) do ping 172.16.0.%%a -w 1 -n 1
PING 172.16.1.1 -w 3000 -n 1
for /f "skip=3 tokens=1,2 delims= " %%i in ('arp -a') do echo %%j %%i >>c:\mac.ini
goto end
:up
for /l %%a in (1,1,254) do ping 172.16.0.%%a -w 1 -n 1
PING 172.16.1.1 -w 3000 -n 1
for /f "skip=3 tokens=1,2 delims= " %%d in ('arp -a') do find "%%d " c:\mac.ini||echo %%e %%d >>c:\mac.ini
:end
作者: franky_1984 时间: 2010-10-25 19:58
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,100) do (
set a=%%i
set /a b=!a!%%10
set /a c=!a!/10%%10
if not b==5 if not c==5 md %%i
if b==5 if c==5 set /a j=!a!+11 & md !j!m
if not b==5 if c==5 set /a k=!a!+10 & md !k!m
if b==5 if not c==5 set /a l=!a!+1 & md !l!m
)
pause>nul
作者: taofan712 时间: 2010-12-15 11:13
- for /l %%i in (60 1 109) do md %%i %%ia
复制代码
这样子的话 就又精简了一些
作者: we6540 时间: 2011-2-2 19:32
@echo off
for /l %%i in (1,1,100) do md %%i
pause
作者: yangeren 时间: 2011-4-1 11:32
随机数这种你们用的我都不明白是什么意思,
for /l %%i in (1 1 100) do call md %%random:5=%%
随机数后面:5是什么意思呢?
只能想到最笨的,大家莫笑。。。。- :0
- if %m% equ 101 goto 2
- set /a w=%random%
- echo %w%|find /i "5" >nul
- if %errorlevel% equ 0 (
- echo %w%此名含5
- goto 0 ) else (
- goto 1
- )
- :1
- dir /b |find /i "%w%" >unl
- if %errorlevel% equ 0 (
- echo 有重复文件名%w%
- goto 0 ) else (
- md !w!
- set /a m=m+1
- )
- goto 0
-
- :2
- echo creat success
- pause
- exit
复制代码
作者: wangqi0077 时间: 2011-5-26 16:07
本帖最后由 wangqi0077 于 2011-5-26 16:10 编辑
看了下前面几楼的..直接用call后面加的不太懂,就改了一个自己懂的...- for /l %%i in (2 1 100) do call:a
- :a
- md %random:5=%
复制代码
作者: 唯尘 时间: 2023-8-17 16:11
@echo off
for /l %%i in (1 1 101) do (
if not "%%i"=="5" md %%i
)
pause>nul 2>&1
作者: 唯尘 时间: 2023-8-17 16:23
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1 1 111) do (
set /a num=%%i %% 5
if not "!num!"=="0" md %%i
)
pause
作者: Batcher 时间: 2023-8-17 16:40
回复 59# 唯尘
你可能看错题目了,5、15、25、等,都不能有。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |