CMD Windows find/search and return absolute path
是否有通过查找返回文件和/或文件夹的绝对路径的方法?
让我们说一下c: est中的filename.txt
1 2 3
| set file=filename.txt
dir %file% /s |
现在它返回第6行中的c: est。但我想要的是它返回绝对路径
C: estfilename.txt并将其设置为variabel,以便下次使用。
谢谢您
- dir /S /B返回完整路径…
- @这是我想要的。顺便问一下,您知道如何在1行中将值从dir传递到下一个命令吗?现在我试着用dir filename /s /b | del,我不知道如何绕过返回del。
只需将/B选项添加到dir/S命令行,就可以返回完全绝对路径。
要捕获此命令行的输出,请使用for /F循环:
1
| for /F"delims=" %I in ('dir /S /B"filename.txt"') do rem/ Do something with `%I`... |
例如,要删除匹配的文件,请执行以下操作:
1
| for /F"delims=" %I in ('dir /S /B"filename.txt"') do del"%I" |
注意,要在批处理文件中使用此代码,必须将%符号加倍,因此%I变为%%I!
- 酷,这是我想要的。现在我尝试无限循环。我在带有基本循环:loop and goto loop的for/f熟食中出错,我如何在不消耗资源的情况下实现这一点?
- 它的工作人!谢谢
- @如果我打断你,我怎么能从绝对路径下得到1个文件夹?比如c: estoofilename.txt。我只想得到C: estoo。到目前为止,我尝试使用find str,但有点错误。'set file=filename for /F"delims=" %%I in ('dir /S /B %file&') do findstr,%file%,,"%%I"从上面的代码中,我将文件名初始化为variabel文件,并使用find str替换为3个参数。1。文件名。2。更改为空。三。从目录输出。稍后与rmdir一起使用。谢谢
- 为了指向一个项目的父目录,只需在我的代码中附加\..(如%I\..;为了解决这个问题(将C:\test\boo\filename.txt\..改为C:\test\boo),使用标准的for循环(没有/F:for %J in ("C:\test\boo\filename.txt\..") do echo/%~J或for %J in ("%I\..") do echo/%~J。
假设将文件名作为批处理脚本的第一个参数,则批处理脚本可能如下所示:
1 2
| set file=%~dpnx1
echo %file% |
调用脚本将返回给定文件的绝对路径,您可以将其作为变量继续使用。有关此问题的详细信息,请参阅文章:从相对路径和/或文件名解析绝对路径
- 谢谢你的回复。我现在知道答案了。
- 你为什么不喜欢%~f1?;-)
- 我从先前的答案中得到答案。我不知道他为什么删掉他的答案。这只是一个简单的选择,我在目录中没有提到。/B