标题: [文件操作] 批处理遍历bat格式文件时如何跳过自身 [打印本页]
作者: sniperhgy 时间: 2009-7-23 12:46 标题: 批处理遍历bat格式文件时如何跳过自身
我有一个批处理,它的作用是遍历当前目录下的批处理文件,生成菜单后,以供调用
其中为了防止自己调用自己,加入了判断功能,当扫描到自己的时候,就跳过
但奇怪的是,当文件名中含有“空格”时,就生效,没有“空格”时,就无效
比如:当前目录下有2个批处理1.bat和2.bat,其中1.bat就是这个批处理,运行结果如下:
- ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
- ┋ BAT文件选择器,输入字母后请按下回车键 ┋
- ┋ ┋
- ┋(0) 1.bat ┋
- ┋(1) 2.bat ┋
- ┋ ┋
- ┋(x) Exit ┋
- ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
- 请输入:
复制代码
也就是说代码中的自身判断没有起作用。
但如果将1.bat改名成1 .bat,运行结果如下:
- ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
- ┋ BAT文件选择器,输入字母后请按下回车键 ┋
- ┋ ┋
- ┋(0) 2.bat ┋
- ┋ ┋
- ┋(x) Exit ┋
- ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
- 请输入:
复制代码
这次就生效了,代码完全相同,只是文件名不同(1.bat -> 1 .bat)
为何结果就不一样了呢?
以下是批处理的代码
- @echo off
- setlocal enabledelayedexpansion
- cls>nul
- set /a item=8
- set "self=%0"
- set "self=!self:~1,-1!"
- for /r .\ %%c in (*.bat) do (
- set /a item+=1
- )
- mode con: cols=45 lines=%item%
- if "%1"=="h" (
- for /r %%a in (*.bat) do (
- if NOT %%a==!self! echo %%~nxa
- )
- echo;
- exit
- )
- set "table=0123456789abcdefghijklmnopqrstuvwyz"
- set "table2=!table!"&set /a z=35
- for /r %%b in (*.bat) do (
- if NOT %%b==!self! (
- set /a count+=1
- if !count! EQU 36 goto make
- set ".!table2:~0,1!=%%b"&set "table2=!table2:~1!"
- )
- )
- :make
- for /f "delims=" %%a in ('%0 h^|findstr /o .*') do (
- if !hh! EQU 35 goto loop
- for /f "delims=:" %%i in ("%%a") do set /a n=%%i-2-h,h=%%i
- if defined var (
- set /a jj=z-n,hh+=1&set "k="
- set "mm=!table:~0,1!"&set "table=!table:~1!"
- if !jj! GTR 0 (
- for /l %%i in (1 1 !jj!) do set "k= !k!"
- ) else (
- if !jj! LSS 0 (
- set "var=!var:~0,19!"&set "var=!var:*:=!"
- for /f "skip=1 delims=:" %%m in ('^(echo."!var!"^&echo.^)^|findstr /o .') do (
- set /a Bytes=35-%%m+5
- )
- for /l %%n in (1 1 !Bytes!) do set "k= !k!"
- )
- )
- set #!hh!=┋^(!mm!^) !var:*:=!!k!┋
- )
- set "var=%%a"
- )
- :loop
- echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
- echo ┋ BAT文件选择器,输入字母后请按下回车键 ┋
- echo ┋ ┋
- for /l %%a in (1 1 !hh!) do echo !#%%a!
- echo ┋ ┋
- echo ┋(x) Exit ┋
- echo ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
- echo;&set num=&set /p num=请输入: &cls
- if /i "%num%"=="x" exit
- start "" "!.%num%!"
- goto loop
复制代码
麻烦知道的朋友指点一下,谢谢了
作者: sniperhgy 时间: 2009-7-24 15:42
难道就没有人愿意帮助我一下吗?
作者: more 时间: 2009-7-24 16:40
你不做一些注释,谁有心来一行一行的分析你的代码呢,你有这样做过吗???
作者: namejm 时间: 2009-7-24 18:18
在所有涉及文件名的地方,用引号对把变量括起来,带空格或特殊字符的文件路径一定要记得带引号。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |