找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35998|回复: 9

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

[复制链接]
发表于 2011-10-9 09:36:28 | 显示全部楼层 |阅读模式
设字符串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,继续下去,直到存在。

问题内容:希望大家提供更好的方案(如果于我的思路相同,或是按照我的思路写的,也请上代码)
发表于 2011-10-9 09:51:43 | 显示全部楼层
-d既可以作为参数,又可以作为文件名的一部分。我完全可以创建一个文件叫做:
3-6.exe -d
你怎么知道-d是参数呢?
 楼主| 发表于 2011-10-9 09:56:57 | 显示全部楼层
本帖最后由 bluewing009 于 2011-10-9 10:03 编辑

回复 2# Batcher


    那么这个文件的扩展名是?如果扩展名:exe -d 的话,这个扩展名无对应注册表项目的。
额,问题描述不准确,补充“文件扩展名为常见类型,但是什么不定,可大致认为不含有空格”
发表于 2011-10-9 10:15:00 | 显示全部楼层
  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}"
复制代码
发表于 2011-10-9 10:27:02 | 显示全部楼层
  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
复制代码
发表于 2011-10-9 10:36:32 | 显示全部楼层
回复 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技术 +1 收起 理由
bluewing009 + 1 谢谢~

查看全部评分

 楼主| 发表于 2011-10-9 11:02:10 | 显示全部楼层
回复 6# awk


    虽然我没实际运行,但是如果文件名含有空格的话,第二个for分离时候有问题吧。
发表于 2011-10-9 11:22:04 | 显示全部楼层
回复  awk


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



    你都没运行怎么知道会有问题的呢,第二个for分离的只是扩展名,你总不会连扩展名也有空格吧
发表于 2011-10-9 11:29:04 | 显示全部楼层
回复 6# awk


    看了你的代码才发现我写的那个确实是啰嗦了,唉,P写得少了,很多的规则都忘记了
发表于 2011-10-9 17:11:09 | 显示全部楼层
兼容性不好...
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 05:59 , Processed in 0.025255 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表