[解決済み] 相対パスやファイル名から絶対パスを解決する
2022-04-22 02:49:38
質問
Windowsのバッチスクリプトで、ファイル名や相対パスを含む値から、絶対パスを返す方法はありますか?
与えられた。
"..\"
"..\somefile.txt"
バッチファイルからの絶対パスが必要です。
例
- "somefile.txt" is located in "C:\Foo"
- "test.bat" is located in "C:\FooBar".
-
ユーザは、"C:Foo" でコマンドウィンドウを開き、以下のコマンドを呼び出します。
Bar\test.bat ..\somefile.txt
-
バッチファイル "C:\Foosomefile.txt" は、次のような内容です。
%1
解決方法は?
バッチファイルでは、標準的なCプログラムと同様に、引数0に現在実行中のスクリプトのパスが含まれます。このとき
%~dp0
は、第0引数のパス部分(現在のスクリプト)だけを取得します。このパスは、常に完全修飾パスです。
また、第1引数の完全修飾パスを取得するために
%~f1
しかし、これは現在の作業ディレクトリに従ったパスを提供し、あなたが望むものではないことは明らかです。
個人的によく使うのは
%~dp0%~1
このイディオムは、第一引数を実行中のバッチのパスからの相対パスで解釈します。しかし、これには欠点がある。第一引数が完全に修飾されている場合、惨めに失敗してしまうのだ。
相対的な と を使用することができます。 Frédéric Ménez氏の解決法 : 現在の作業ディレクトリを一時的に変更します。
ここでは、それぞれのテクニックを紹介する例を示します。
@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"
rem Temporarily change the current working directory, to retrieve a full path
rem to the first parameter
pushd .
cd %~dp0
echo batch-relative %%~f1 is "%~f1"
popd
これをc: \temp ⇄example.batとして保存し、c:⇄Users⇄Publicから実行すると
c:\UsersPublic>\tempexample.bat ...\windows
...次のような出力が観測されます。
%~dp0 is "C:\temp\"
%0 is "\temp\example.bat"
%~dpnx0 is "C:\temp\example.bat"
%~f1 is "C:\Users\windows"
%~dp0%~1 is "C:\temp\..\windows"
batch-relative %~f1 is "C:\Windows"
バッチ引数で許可される一連の修飾子についてのドキュメントは、ここにあります。 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call
関連
-
[解決済み】xcopyでexcludeパラメータを設定すると「パラメータの数が無効です」というエラーが返ってくる。
-
[解決済み】DockerリポジトリサーバーがHTTPSクライアントにHTTPレスポンスを返すようになった
-
[解決済み] Windowsのフラッシュドライブに_disk_id.podというファイルが表示される
-
[解決済み] ssh_dispatch_run_fatal:message authentication code incorrect unable to ssh jupyter notebook on remote server.入力のMACが破損している。
-
[解決済み] WindowsタスクスケジューラでVBScriptが実行されない
-
tensorflow load error 終了コード -1073741819 (0xC0000005)でプロセス終了。
-
[解決済み] セットの/pはどういう意味ですか?
-
[解決済み] Pythonでファイルの絶対パスを取得する方法
-
[解決済み] 相対パスからモジュールをインポートする
-
[解決済み] Windowsのコマンドライン環境を使って、ファイル内のテキストを検索・置換するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】VMの初期化中にエラーが発生した(java/lang/NoClassDefFoundError: java/lang/Object)
-
[解決済み] xcopyがAccess Deniedと表示される原因は何ですか?
-
[解決済み] Windowsのフラッシュドライブに_disk_id.podというファイルが表示される
-
[解決済み] 0|%0とは何ですか、どのように機能しますか?
-
[解決済み] WPCups.exeとは何ですか?[クローズド]です。
-
Windows2008 スケジュールタスク、エラー追加データ。エラーの値: 2147750687。
-
[解決済み] Windowsネイティブアプリケーションを作るには?[クローズド]
-
[解決済み] docker-machine: マシン名がない、"default" が存在しない
-
[解決済み] WindowsのcmdでCD /Dスイッチの理由は何ですか?
-
[解決済み】Windowsのバッチファイルの隠し機能