我想从.bat
文件中获取文件的父目录。所以,给定一个变量设置为"C:\MyDir\MyFile.txt"
,我想获得"C:\MyDir"
。换句话说,在典型的UNIX环境中相当于dirname()
功能。这可能吗?如何在批处理文件中获得dirname()的等效项?
18
A
回答
20
for %%F in (%filename%) do set dirname=%%~dpF
这将设置%dirname%
存储在%filename%
文件名的驱动器和目录。
虽然,小心使用包含空格的文件名。他们要么必须与周围的引号设置:
set filename="C:\MyDir\MyFile with space.txt"
或你必须把周围参数报价在for
循环:
for %%F in ("%filename%") do set dirname=%%~dpF
这两种方法都可以工作,无论是在获得同一时间“T :-)
6
如果因任何原因,你不能使用(没有命令扩展等),你可能能够与闪避.. \黑客:
set file=c:\dir\file.txt
set dir=%file%\..\
3
for循环的问题在于,它会在字符串的末尾留下尾部\。这会导致问题,如果你想多次获取dirname。也许你需要获取包含该文件的目录的祖父目录的名称,而不仅仅是父目录。第二次使用for循环技术将删除\,并且不会获得祖父目录。
这就是你不能简单地做到以下几点。
set filename=c:\1\2\3\t.txt
for %%F in ("%filename%") do set dirname=%%~dpF
for %%F in ("%dirname%") do set dirname=%%~dpF
这将设置dirname为“c:\ 1 \ 2 \ 3”,而不是“c:\ 1 \ 2”。
以下功能通过删除尾部\来解决该问题。
:dirname file varName
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET _dir=%~dp1
SET _dir=%_dir:~0,-1%
endlocal & set %2=%_dir%
GOTO :EOF
它被调用如下。
set filename=c:\1\2\3\t.txt
call :dirname "%filename%" _dirname
call :dirname "%_dirname%" _dirname
相关问题
- 1. Dirname在Go中的等效
- 2. 如何获得昨天的日期在批处理文件
- 3. 如何从批处理文件中调用批处理文件?
- 4. 在Ruby中等效于PHP的dirname(__ FILE__)?
- 5. C#如何获得其他批处理文件的输出?
- 6. 如何获得批处理文件的路径
- 7. 如何在tensorflow中运行Iteration.get_next()后获得批处理批处理?
- 8. 如何获得UNIVERSAL Windows批处理文件时间戳
- 9. 如何获得通过批处理文件
- 10. 如何获取批处理文件来处理文件名中的空格?
- 11. 将批处理文件包含在批处理文件中
- 12. 如何在windows批处理文件中获取其余参数?
- 13. 如何在java中捕获批处理文件错误
- 14. 批处理文件 - 等待循环中的文件
- 15. 如何在批处理文件
- 16. 如何在批处理文件
- 17. 如何在批处理过程中获取文件夹中的文件?
- 18. 如何获得目录路径的一部分在批处理文件
- 19. Windows批处理文件如果失败 - 30000000000000如何等于40000000000?
- 20. 如何返回如果输入不等于;批处理文件
- 21. 如何获得一个简单的批处理文件,以便在Visual Studio中使用我的项目运行?
- 22. 如何处理Windows批处理文件路径中的空格?
- 23. 如何获取Windows批处理文件中的返回值
- 24. 如何从批处理文件中获取进程的PID?
- 25. 如何从已执行的批处理文件中获取值
- 26. 如何在Windows批处理文件中嵌入文本文件
- 27. 处理在批处理文件
- 28. 在jenkins调用的批处理文件中调用批处理文件
- 29. 如何在Junit3中获得@BeforeClass和@AfterClass等效项?
- 30. 如何从批处理文件中的文本文件中获取字符串?
我加了一个关于带空格的文件名的注释;忘记与那些测试。 – Joey 2009-04-22 17:40:14