[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理获取文件路径

设字符串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,继续下去,直到存在。

问题内容:希望大家提供更好的方案(如果于我的思路相同,或是按照我的思路写的,也请上代码)

-d既可以作为参数,又可以作为文件名的一部分。我完全可以创建一个文件叫做:
3-6.exe -d
你怎么知道-d是参数呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 bluewing009 于 2011-10-9 10:03 编辑

回复 2# Batcher


    那么这个文件的扩展名是?如果扩展名:exe -d 的话,这个扩展名无对应注册表项目的。
额,问题描述不准确,补充“文件扩展名为常见类型,但是什么不定,可大致认为不含有空格”

TOP

  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}"
复制代码

TOP

  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
复制代码

TOP

回复 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
复制代码
1

评分人数

TOP

回复 6# awk


    虽然我没实际运行,但是如果文件名含有空格的话,第二个for分离时候有问题吧。

TOP

回复  awk


    虽然我没实际运行,但是如果文件名含有空格的话,第二个for分离时候有问题吧。
bluewing009 发表于 2011-10-9 11:02



    你都没运行怎么知道会有问题的呢,第二个for分离的只是扩展名,你总不会连扩展名也有空格吧

TOP

回复 6# awk


    看了你的代码才发现我写的那个确实是啰嗦了,唉,P写得少了,很多的规则都忘记了

TOP

兼容性不好...
  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
复制代码

TOP

返回列表