【问题标题】:DOS batch: get last folder from relative pathDOS批处理:从相对路径获取最后一个文件夹
【发布时间】:2011-05-17 21:37:26
【问题描述】:

我在 DOS 批处理文件中有以下值(例如...):

..\Apple\Jones  
..\Banana\Smith  
..\Pear\Wilson  

我需要从每个值中提取姓氏值(“Jones”、“Smith”、“Wilson”)。我可以使用哪一种技术来始终为我提供这些子字符串值?

【问题讨论】:

标签: parsing substring extraction batch-file indexof


【解决方案1】:

根据这个话题:What is the best way to do a substring in a batch file?

我建议你使用

%~n0

【讨论】:

  • 我不关注。这显示了批处理文件的名称?这对我提出的问题有何影响?
  • 抱歉我的解释不好。 %0 包含脚本的路径。使用 %~n0 仅提取脚本名称。这是一个更明确的例子: for /D %%i in ("..\Apple\Jones","..\Banana\Smith","..\Pear\Wilson") do echo %%~ni跨度>
  • 令人愉快。谢谢你。注意:我使用了echo %%~ni%%~xi,因为我的最后一个文件夹(真实数据)是一个名称包含句点的目录。
  • %%~ni%%~xi可以写成%%~nxi
【解决方案2】:

我已经为此编写了一个函数。你给它任何路径,它只返回它的文件名或路径名。适用于任何路径:Url、Windows 路径、Linux 路径等...

在批处理脚本的末尾复制此函数:(以下说明)

rem ===========================================================================

:Name_From_Path
SetLocal

set _TMP_FOLDERNAME=%1
for %%g in ("%_TMP_FOLDERNAME%") do set _TMP_FOLDERNAME=%%~nxg

EndLocal & set _Name_From_Path=%_TMP_FOLDERNAME%
goto :EOF

rem ===========================================================================

用法:

CALL :Name_Of_Path ..\Apple\Jones
ECHO %_Name_From_Path%

结果:琼斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2011-09-29
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多