【问题标题】:CMD Windows find/search and return absolute pathCMD Windows 查找/搜索并返回绝对路径
【发布时间】:2018-03-25 10:26:57
【问题描述】:

有没有办法通过 find 返回文件或文件夹的绝对路径?

假设 C:\test 中的 filename.txt

set file=filename.txt

dir %file% /s 

现在它在第 6 行返回 c:\test。但我想要的是它返回绝对路径

c:\test\filename.txt 并将其设置为 variabel 以供下次使用。

谢谢

【问题讨论】:

  • dir /S /B 返回完整路径...
  • @aschipfl thx 这是我想要的。顺便说一句,您知道如何将值从 dir 传递到 1 行中的下一个命令吗?现在我尝试dir filename /s /b | del我不知道如何绕过返回del。

标签: cmd


【解决方案1】:

只需将/B 选项添加到dir/S 命令行,它就会返回完整的绝对路径。

要捕获此命令行的输出,请使用for /F loop

for /F "delims=" %I in ('dir /S /B "filename.txt"') do rem/ Do something with `%I`...

例如,要删除匹配的文件,请执行以下操作:

for /F "delims=" %I in ('dir /S /B "filename.txt"') do del "%I"

请注意,您必须将% 符号加倍才能在批处理文件中使用此代码,因此%I 变为%%I

【讨论】:

  • 酷就是我想要的。现在我尝试无限循环。我在带有基本循环:loop and goto loop 的 for /f delims 中出现错误,我如何在没有资源匮乏的情况下实现这一目标?
  • @aschipfl 对不起,如果我打断你的话。如何从绝对路径中获取 1 个向下文件夹?假设 C:\test\boo\filename.txt。我只想得到 C:\test\boo\。到目前为止,我尝试使用 find str 但好像出了点问题。` set file = filename for /F "delims=" %%I in ('dir /S /B %file&') do findstr,%file%,, "%%I" 从上面的代码我将文件名初始化为变量文件并使用 findstr 替换为 3 个参数。 1.文件名。 2.改为空。 3. 目录的输出。稍后与 rmdir 一起使用。谢谢
  • 要指向一个项目的父目录,只需附加\..(就像我的代码中的%I\..);解决它(以便将C:\test\boo\filename.txt\.. 更改为C:\test\boo)在我的代码中使用标准for 循环(没有/F):for %J in ("C:\test\boo\filename.txt\..") do echo/%~Jfor %J in ("%I\..") do echo/%~J...
【解决方案2】:

假设您将文件名作为批处理脚本的第一个参数,您的批处理脚本可能如下所示:

set file=%~dpnx1
echo %file%

调用脚本将返回给定文件的绝对路径,您可以将其用作变量。 更多细节可以在帖子中找到:Resolve absolute path from relative path and/or file name

【讨论】:

  • 你为什么不喜欢%~f1? ;-)
  • 我从上一个答案中得到了答案。我不知道他为什么删除他的答案。它只是一个简单的选项,我在目录中没有提到。 /b
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多