Board logo

标题: [系统相关] 批处理获取文件路径 [打印本页]

作者: 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

  1. 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

  1. @echo off
  2. set a=C:\12 3\45\3-6.exe -d /m -s
  3. set a=%a:/=-%
  4. for /f "delims=" %%i in ('echo %a%') do (set s=%%~dpni&set n=%%~xi)
  5. for /f "tokens=1 delims= " %%i in ('echo %n%') do set n=%%i
  6. echo %s%%n%
  7. pause
复制代码

作者: awk    时间: 2011-10-9 10:36

回复 5# 601997526
  1. @echo off
  2. set a=C:\12 3\45\3-6.exe -d /m -s
  3. set a=%a:/=-%
  4. for %%i in ("%a%") do (set s=%%~dpni&set n=%%~xi)
  5. for /f %%i in ("%n%") do set n=%%i
  6. echo %s%%n%
  7. 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

兼容性不好...
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=C:\12 3\45\3-6.exe -d /m -s
  3. set del=%str:*.exe=%
  4. echo !str:%del%=!
  5. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2