经过一个下午的努力,终于有了结果,效率不是很高,但还是基本能够实现目标。第一次来挑战区,请多多指教。 | echo.>abc.txt | | echo.>"abc xyz.txt" | | echo.>"abc^xyz.txt" | | echo.>"abc&xyz.txt" | | echo.>"abc & xyz.txt" | | echo.>"(abc)(xyz).txt" | | echo.>"(abc) (xyz).txt" | | echo.>"(abc)&(xyz).txt" | | echo.>"(abc) & (xyz).txt" | | echo.>"abc;xyz.txt" | | echo.>"abc,xyz.txt" | | echo.>"abc=xyz.txt"COPY |
可以同时拖拉多个文件到批处理中,最后获取这几个文件的完全合格文件名。
文件名含有空格的也可以实现。
但文件名中含有(.)与(&)的,后缀名非三位(如.db、html)的无法读取——需要重新设置。
不处理文件夹。
已经支持的后缀名有:txt;doc;exe;rar;mp3;jpg;wma;bat,其它格式需补充。
可能与 “echo %*”有关,重定向时自动放到“%USERPROFILE% ”中去了,只好用 “>>%~dp0”。
由于用了两对重复的FOR,特别是设置“hzm”的FOR,导致速度下降。
应该也支持从单个文本内容中提取路径名。方法是将“~dp0_2tyxs.txt”改为该文本名称。
其它方面有待完善。
| @echo off&setlocal enabledelayedexpansion | | echo %*>>"%~dp0_test.txt" | | echo.>"%~dp0_test2.txt" | | echo.>"%~dp0_results.txt" | | for /f "usebackq tokens=*" %%i in ("%~dp0_test.txt") do ( | | set var=%%i | | for /l %%a in (0,1,1000) do ( | | set /a ddl=%%a-1 | | set str2=!var:~%%a,2! | | if "!str2!"==":\" call echo %%var:~!ddl!,1%%!var:~%%a,1000!>>"%~dp0_test1.txt" | | ) | | ) | | for %%l in (txt;doc;exe;rar;mp3;jpg;wma;bat;htm;pdf;ppt) do ( | | set hzm=%%l | | for /f "usebackq tokens=*" %%i in ("%~dp0_test1.txt") do ( | | set var=%%i | | for /l %%a in (0,1,1000) do ( | | set /a ddf=%%a+4 | | set str=!var:~%%a,4! | | if "!str!"==".!hzm!" echo !var:~0,%%a!.!hzm!>>"%~dp0_test2.txt" | | ) | | ) | | for /f "usebackq tokens=1,2,3,4 delims=." %%a in ("%~dp0_test2.txt") do ( | | set vara=%%a | | set varb=%%b | | if /i "!varb:~0,3!"=="!hzm!" echo !vara!.!varb:~0,3!>>"%~dp0_test3.txt" | | ) | | ) | | for /f "usebackq delims=" %%a in (`sort "%~dp0_test3.txt"`) do ( | | if not %%a equ !b! echo %%a>>"%~dp0_results.txt" | | set b=%%a) | | del "%~dp0_test.txt" | | del "%~dp0_test1.txt" | | del "%~dp0_test3.txt" | | del "%~dp0_test2.txt" | | start "" "%~dp0_results.txt" | | EXITCOPY |
[ 本帖最后由 cjiabing 于 2010-8-21 10:42 编辑 ] |