gpt4 book ai didi

batch-file - 批处理 : get last folder name from path from txt

转载 作者:行者123 更新时间:2023-12-02 02:08:59 27 4
gpt4 key购买 nike

我需要从 txt 获取路径并获取最后的文件夹名称,然后使用它。

setlocal EnableDelayedExpansion

set InputFile=somar.txt
for /f "tokens=* delims=" %%x in ('Type "%InputFile%"') do (
set path=%%x
:shift
for /f "tokens=1* delims=\/" %%i in ( "!path!" ) do (
set folder=%%i
set path=%%j
)
if not [!path!] == [] goto :shift

echo folder: !folder!
)
endlocal

问题是它只适用于 txt 中的第一行。问题出在哪里?

最佳答案

你有很多问题:

1) 当您发出 GOTO 时,您的 FOR 循环就中断了。在 GOTO 之后,您将不会再获得任何 FOR 循环迭代。您可以通过将 GOTO 循环移动到子例程中然后从 DO 循环中调用子例程来解决此问题。

2) PATH 环境变量对 Windows 具有保留意义。你永远不应该为了你自己的目的使用那个变量名,即使它已经本地化了。不值得去试探命运。只需使用不同的变量名称即可。

3) 可能不是您的数据问题,但是 ! 是文件或文件夹名称的有效字符。如果启用延迟扩展,您对 FOR 变量的扩展将破坏包含 ! 的名称。这可以通过根据需要打开和关闭延迟扩展来解决。

您的效率也略有下降 - 无需在 FOR 循环中使用 TYPE。你可以简单地让 FOR 直接读取文件。 (除非文件是 unicode)

您可以采纳上述所有建议,但有一个简单得多的解决方案:-)

编辑 - 为处理以 \

结尾的路径所做的更改
@echo off
set "InputFile=somar.txt"
for /f "usebackq eol=: delims=" %%A in ("%inputFile%") do (
for %%F in ("%%A\.") do echo folder: %%~nxF
)

~nx FOR 变量修饰符直接给你路径结束的名称和扩展名。从命令行键入 HELP FOR 以了解可用于 FOR 变量的所有修饰符。

关于batch-file - 批处理 : get last folder name from path from txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com