我想從.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. 在JavaScript中等效於PHP的dirname(__ FILE__)?
- 6. 如何獲得Windows批處理的父文件夾
- 7. 如何獲得批處理文件的路徑
- 8. C#如何獲得其他批處理文件的輸出?
- 9. 如何在tensorflow中運行Iteration.get_next()後獲得批處理批處理?
- 10. 如何從批處理文件調用批處理文件
- 11. 如何獲得通過批處理文件
- 12. 如何獲得UNIVERSAL Windows批處理文件時間戳
- 13. 如何獲得批處理文件運行使用java
- 14. 如何獲取批處理文件來處理文件名中的空格?
- 15. 將批處理文件包含在批處理文件中
- 16. Oracle在批處理文件中導入批處理文件
- 17. 在批處理文件中運行幾個批處理文件
- 18. 在批處理腳本中批量等效於「for my cat xx.txt」
- 19. 如何使用批處理文件中的標誌調用批處理文件
- 20. 如何將%random%添加到批處理文件的新批處理文件中?
- 21. 從批處理文件中獲取批處理文件的服務器名稱
- 22. 批處理文件 - 忽略子批處理文件中的CLS
- 23. 如何獲得批處理文件以接受來自txt文件的輸入?
- 24. 如何在DOS批處理文件中獲取mm-dd-yyyy?
- 25. 如何在java中捕獲批處理文件錯誤
- 26. 如何在win98批處理文件中獲取當前路徑?
- 27. 如何在windows批處理文件中獲取其餘參數?
- 28. 批處理文件 - 等待循環中的文件
- 29. 如何在批處理文件
- 30. 如何在批處理文件
我加了一個關於帶空格的文件名的註釋;忘記與那些測試。 – Joey 2009-04-22 17:40:14