经过一个下午的努力,终于有了结果,效率不是很高,但还是基本能够实现目标。第一次来挑战区,请多多指教。- 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"
复制代码 可以同时拖拉多个文件到批处理中,最后获取这几个文件的完全合格文件名。
文件名含有空格的也可以实现。
但文件名中含有(.)与(&)的,后缀名非三位(如.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"
- EXIT
复制代码
[ 本帖最后由 cjiabing 于 2010-8-21 10:42 编辑 ] |