Board logo

标题: [系统相关] [已解决]批处理如何截取路径中的某一段? [打印本页]

作者: crist    时间: 2012-8-20 16:48     标题: [已解决]批处理如何截取路径中的某一段?

本帖最后由 pcl_test 于 2017-8-2 08:38 编辑

在特定路径中搜索含有特定文件夹的路径,并输出该路径中特定的一截,请问如何实现?

举例:
  1. for /f "delims=\ tokens=6" %%i in ('dir/ad/b/s "%userprofile%\Application Data\Skype\chatsync"') do (
  2. if exist "%userprofile%\Application Data\Skype\%%i\main.db" if exist "%userprofile%\Application Data\Skype\%%i\config.xml" echo 存在 Skype 用户名:%%i
  3. )
复制代码
在以上代码中chatsync就是特定的文件夹,而我需要输出的是chatsync上一层的文件夹名称。

在我举例的代码中是从左边算起选择路径的第六段输出,假设实际路径与例子不同,我要输出的文件夹名称不是在从左算起第六段,那么我这个代码输出的结果就是错误的。

在无法事先知道需要输出的文件夹名称在路径中的哪一段的情况下,由于不管路径如何变化,Skype帐号名总是在chatsync上一层,所以能否从右边算起选择路径倒数第二段输出?

问题已解决,谢谢apang大侠的代码(因为他的从右边选起的代码比我自己的从左边选起的代码显得更具有“正确”性)
作者: apang    时间: 2012-8-20 17:53

  1. @echo off
  2. set "key=chatsync"
  3. for /f "delims=" %%a in ('dir /ad/b/s "%userprofile%\%key%"') do (
  4.   for %%b in ("%%a\..") do echo %%~nxb
  5. )
  6. pause
复制代码

作者: crist    时间: 2012-8-21 16:20

本帖最后由 crist 于 2012-8-21 16:26 编辑

回复 2# apang


测试确实能用,不过我还没弄懂其中的奥妙

%%a\..是什么用意?
%%~nxb应该是输出含后缀名的文件名的意思吧?为何在这里的效果会变成选取倒数第三段(%%a\..="C:\Documents and Settings\USER\Application Data\Skype\abc\chatsync\..")?

另外你的代码删除了我的一个附加条件——只有在%%~nxb文件夹下面同时存在main.db和config.xml时才输出%%~nxb。
作者: 狗屁不通    时间: 2012-8-21 16:28

那是变量,自己看:for/?   set/?
作者: crist    时间: 2012-8-21 16:43

回复 2# apang


    echo %%a\..的结果是xxx\xxx\xxx\..,但是实际中输入%%a\..这个地址后是跳转到上一级路径去了,所以我估计这个代码的意思是跳转到上一级路径。
    %%~nxb不是输出文件名吗?怎么变成了输出文件夹名称了?
作者: apang    时间: 2012-8-21 21:38

回复 5# crist

假设搜索得到%%a的值为C:\Documents and Settings\USER\Application Data\Skype\abc\chatsync
%%a\..为上一级目录,即C:\Documents and Settings\USER\Application Data\Skype\abc
%%~nxb扩展该字符串为文件名,即abc,如果abc是一个目录就是目录名;abc是文件就是文件名了。
加上了所要求的附加条件,试试:
  1. @echo off
  2. set "p=%userprofile%\Application Data\skype"
  3. for /f "delims=" %%a in ('dir /ad /b /s "%p%\chatsync"') do (
  4.   if exist "%%~dpamain.db" if exist "%%~dpaconfig.xml" (
  5.     for %%b in ("%%a\..") do echo %%~nxb
  6.   )
  7. )
  8. pause
复制代码





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