本帖最后由 wskwfkbdn 于 2016-1-29 16:48 编辑
发表于 2010-4-5 23:44
[未彻底解决]多个文件拖到cmd窗口后,如何获取每一文件的完整路径
打开帖子地址
看到这个帖子中说到拖放的文件路径中如果包含 “&” 或者 空格 等字符,难以正常的获取文件完整路径,我也尝试了很久,确实非常的麻烦,因为bat接收运行参数是%0~%9的,默认以空格符分割,如果文件路径存在&字符和空格符,那么%0~%9获取参数肯定是不完整的,只好用%*接收所有参数进行字符处理,以下代码不解释啦,高手懂了就懂了,菜鸟还是看注释吧。也请大神们多多指教。- @echo OFF&SETLOCAL ENABLEDELAYEDEXPANSION
- TITLE 获取多个文件的完整路径 兼容特殊字符
- REM ABCDEFGHIJKLMNOPQRSTUVWXYZ
- REM %* 接收全部参数 目前仅最大支持25参数,也就是一次性接收25个文件的拖放处理。
- SET xiao=%*
- REM 取路径的驱动器号(C: D: E: ......)
- SET abc=%xiao:~0,2%
- ECHO ^%abc%|find ":" >nul && set jjdd=^%abc:~0,1%||set jjdd=^%abc:~1,2%
- REM 以“:”作为分割符 分割文本
- FOR /f "tokens=1-26 delims=:" %%a IN ('echo %xiao%') DO (
- SET abc=0
- IF NOT "%%a"=="" CALL :HeHe "%jjdd%:%%b"
- IF NOT "%%c"=="" CALL :HeHe "%jjdd%:%%c"
- IF NOT "%%d"=="" CALL :HeHe "%jjdd%:%%d"
- IF NOT "%%e"=="" CALL :HeHe "%jjdd%:%%e"
- IF NOT "%%f"=="" CALL :HeHe "%jjdd%:%%f"
- IF NOT "%%g"=="" CALL :HeHe "%jjdd%:%%g"
- IF NOT "%%h"=="" CALL :HeHe "%jjdd%:%%h"
- IF NOT "%%i"=="" CALL :HeHe "%jjdd%:%%i"
- IF NOT "%%j"=="" CALL :HeHe "%jjdd%:%%j"
- IF NOT "%%k"=="" CALL :HeHe "%jjdd%:%%k"
- IF NOT "%%l"=="" CALL :HeHe "%jjdd%:%%l"
- IF NOT "%%m"=="" CALL :HeHe "%jjdd%:%%m"
- IF NOT "%%n"=="" CALL :HeHe "%jjdd%:%%n"
- IF NOT "%%o"=="" CALL :HeHe "%jjdd%:%%o"
- IF NOT "%%p"=="" CALL :HeHe "%jjdd%:%%p"
- IF NOT "%%q"=="" CALL :HeHe "%jjdd%:%%q"
- IF NOT "%%r"=="" CALL :HeHe "%jjdd%:%%r"
- IF NOT "%%s"=="" CALL :HeHe "%jjdd%:%%s"
- IF NOT "%%t"=="" CALL :HeHe "%jjdd%:%%t"
- IF NOT "%%u"=="" CALL :HeHe "%jjdd%:%%u"
- IF NOT "%%v"=="" CALL :HeHe "%jjdd%:%%v"
- IF NOT "%%w"=="" CALL :HeHe "%jjdd%:%%w"
- IF NOT "%%x"=="" CALL :HeHe "%jjdd%:%%x"
- IF NOT "%%y"=="" CALL :HeHe "%jjdd%:%%y"
- IF NOT "%%z"=="" CALL :HeHe "%jjdd%:%%z"
- )
-
- PAUSE&EXIT
-
- :HeHe
- REM 对已经分割好的文本进行最后的替换处理,删除多余字符。
- SET aa=%1
- SET /a abc+=1
- SET "aa=!aa: %jjdd%=!"
- SET "aa=!aa: "%jjdd%=!"
- SET "aa=!aa:""="!"
- ECHO %abc% !aa!
- GOTO :EOF
复制代码
|