标题: [系统相关] 批处理获取文件路径 [打印本页]
作者: bluewing009 时间: 2011-10-9 09:36 标题: 批处理获取文件路径
设字符串a为:某文件路径 参数形式。
比如:
C:\12 3\45\3-6.exe -d /m -s
上例中C:\12 3\45\3-6.exe为文件路径及文件名,格式,长度,内容(空格数量位置)不定,但符合命名规则,文件扩展名为常见类型,但是什么不定,可大致认为不含有空格;-d /m -s为参数,参数形式不定(以-/开头),长度不定,内容(参数自身无空格)不定。注意上式只是个例子。
目的:获取文件路径和文件名(去掉参数项目)
我的思路:因为符合命名规则,直接以delims=/可以直接使“参数”部分仅含有“-XX...”类型。利用~dp获得文件路径s 那么~nxi就是文件名和参数n,对n以空格进行分离,分离后于路径组合,判断 %s%\分离1 exist?,否则继续判断 %s%\分离1 分离2,继续下去,直到存在。
问题内容:希望大家提供更好的方案(如果于我的思路相同,或是按照我的思路写的,也请上代码)
作者: Batcher 时间: 2011-10-9 09:51
-d既可以作为参数,又可以作为文件名的一部分。我完全可以创建一个文件叫做:
3-6.exe -d
你怎么知道-d是参数呢?
作者: bluewing009 时间: 2011-10-9 09:56
本帖最后由 bluewing009 于 2011-10-9 10:03 编辑
回复 2# Batcher
那么这个文件的扩展名是?如果扩展名:exe -d 的话,这个扩展名无对应注册表项目的。
额,问题描述不准确,补充“文件扩展名为常见类型,但是什么不定,可大致认为不含有空格”
作者: awk 时间: 2011-10-9 10:15
- echo C:\12 3\45\3-6.exe -d /m -s | gawk -F. "{for(i=1;i<NF;i++)printf $i\".\";gsub(/ .*/,\"\",$NF);print $NF}"
复制代码
作者: 601997526 时间: 2011-10-9 10:27
- @echo off
- set a=C:\12 3\45\3-6.exe -d /m -s
- set a=%a:/=-%
- for /f "delims=" %%i in ('echo %a%') do (set s=%%~dpni&set n=%%~xi)
- for /f "tokens=1 delims= " %%i in ('echo %n%') do set n=%%i
- echo %s%%n%
- pause
复制代码
作者: awk 时间: 2011-10-9 10:36
回复 5# 601997526 - @echo off
- set a=C:\12 3\45\3-6.exe -d /m -s
- set a=%a:/=-%
- for %%i in ("%a%") do (set s=%%~dpni&set n=%%~xi)
- for /f %%i in ("%n%") do set n=%%i
- echo %s%%n%
- pause
复制代码
作者: bluewing009 时间: 2011-10-9 11:02
回复 6# awk
虽然我没实际运行,但是如果文件名含有空格的话,第二个for分离时候有问题吧。
作者: 601997526 时间: 2011-10-9 11:22
回复 awk
虽然我没实际运行,但是如果文件名含有空格的话,第二个for分离时候有问题吧。
bluewing009 发表于 2011-10-9 11:02
你都没运行怎么知道会有问题的呢,第二个for分离的只是扩展名,你总不会连扩展名也有空格吧
作者: 601997526 时间: 2011-10-9 11:29
回复 6# awk
看了你的代码才发现我写的那个确实是啰嗦了,唉,P写得少了,很多的规则都忘记了
作者: CrLf 时间: 2011-10-9 17:11
兼容性不好...- @echo off&setlocal enabledelayedexpansion
- set str=C:\12 3\45\3-6.exe -d /m -s
- set del=%str:*.exe=%
- echo !str:%del%=!
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |