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

[系统相关] [已解决]批处理如何截取路径中的某一段?

本帖最后由 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大侠的代码(因为他的从右边选起的代码比我自己的从左边选起的代码显得更具有“正确”性)
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

评分人数

TOP

本帖最后由 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。

TOP

那是变量,自己看:for/?   set/?

TOP

回复 2# apang


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

TOP

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

TOP

返回列表