.bat
ファイル内のファイルの親ディレクトリを取得したいとします。だから、変数が"C:\MyDir\MyFile.txt"
に設定されていれば、"C:\MyDir"
を取得したいと思います。つまり、典型的なUNIX環境ではdirname()
の機能に相当します。これは可能ですか?バッチファイルでdirname()に相当するものを取得するにはどうすればよいですか?
18
A
答えて
20
for %%F in (%filename%) do set dirname=%%~dpF
これは%filename%
に保存されたファイル名のドライブおよびディレクトリへ%dirname%
を設定します。
スペースを含むファイル名には注意してください。どちらの
for %%F in ("%filename%") do set dirname=%%~dpF
方法は、両方の同じ時間ウォンで、動作します:
set filename="C:\MyDir\MyFile with space.txt"
か、for
ループで引数の前後に引用符を置く必要があります:彼らは周囲の引用符を使用して設定する必要がありますどちらか
6
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
これは、 "C:\ 1 \ 2 \ 3" にDIRNAMEを設定しますない "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
+0
末尾の\問題には良い解決策です。さもなければ、最後の引用符が前のスラッシュでエスケープされるので、 ''%dirname% "'を直接使用することはできません。そのような場合、 ''%dirname%\ "'が動作します。しかし、一度にどちらか一方だけ。 – Vertigo
関連する問題
- 1. VB.netでvolatileに相当するものを指定するにはどうすればよいですか?
- 2. ScalaでPOJOに相当するものを使用するにはどうすればよいですか?
- 3. JavaScriptで.data()(jQuery)に相当するものを見つけるにはどうすればよいですか?
- 4. C#の "extended"に相当するものはどれですか?
- 5. バッチファイルを取得してファイル名のスペースを処理するにはどうすればよいですか?
- 6. バッチファイルにタイマーを追加するにはどうすればよいですか?
- 7. ドラッグした後に相対レイアウトの子を取得するにはどうすればよいですか?
- 8. SQLPlusのバッチファイルを作成するにはどうすればよいですか?
- 9. Perlプログラムの絶対パスを相対パスから取得するにはどうすればよいですか?
- 10. grailsでデータベースインスタンスを取得するにはどうすればよいですか?
- 11. プログラムで_GLOBAL_OFFSET_TABLE_アドレスを取得するにはどうすればよいですか?
- 12. @WindowScopedでオブジェクトを取得するにはどうすればよいですか?
- 13. Clojureでコールスタックを取得するにはどうすればよいですか?
- 14. アプリケーションレベルでネットワークメッセージを取得するにはどうすればよいですか?
- 15. UIPickerViewでテキストを取得するにはどうすればよいですか?
- 16. HttpSessionListenerでHttpServletRequestを取得するにはどうすればよいですか?
- 17. Cでディレクトリリストを取得するにはどうすればよいですか?
- 18. オーバーレイウィンドウでタッチイベントを取得するにはどうすればよいですか?
- 19. Androidでハイブリッドマップビューを取得するにはどうすればよいですか?
- 20. oauthでparamsを取得するにはどうすればよいですか?
- 21. Oracleでブロックヘッダーサイズを取得するにはどうすればよいですか?
- 22. .NETでOutOfMemoryExceptionを取得するにはどうすればよいですか?
- 23. UIBarButtonItemでバッジを取得するにはどうすればよいですか?
- 24. Sitecore:URLでメディアライブラリアイテムを取得するにはどうすればよいですか?
- 25. メモリアドレスから相対オブジェクトを取得するにはどうすればよいですか?
- 26. COM相互運用機能:LPDISPATCHからCCWを取得するにはどうすればよいですか?
- 27. Javascriptでこれに相当するものは何ですか?
- 28. SQLで行数とともに行を取得するにはどうすればよいですか?
- 29. ネットワークアプリケーションのライセンスを取得するにはどうすればよいですか?
- 30. カスタムオープングラフオブジェクトのカスタムプロパティを取得するにはどうすればよいですか?
スペースでファイル名についての発言を追加しました。それらと一緒にテストするのを忘れてしまった。 – Joey