簡體   English   中英

如何在 Windows 批處理/Python 文件中獲取當前目錄的路徑?

[英]How to get path of current directory in Windows Batch/Python file?

這個問題可能看起來令人困惑,我不是編碼專家,所以希望我能正確解釋......

我有一個簡單的 windows 批處理文件,用於運行 python 腳本。 批處理文件如下所示:

cd C:\model\scripts
python run_project.py C:\2017to2021\Spruce2\button-down-president

因此,在將目錄更改為保存 python 腳本的位置后, run_project.py初始化一個水文 model,該水文使用來自路徑C:\2017to2021\Spruce2\button-down-president的輸入的輸入。

問題是,我經常設置許多不同的 model 運行,每個運行都有唯一的輸入路徑。 通常我只會將此批處理文件的庫存版本直接復制到給定運行的路徑,然后手動輸入 go 並使用新路徑名更新它。 所以我會將上面的示例批處理文件復制到一個新目錄並手動將其轉換為:

cd C:\model\scripts
python run_project.py C:\Documents\BAER_Roads\Modeling\Wepp_PEP\Runs\SingleStorm\NomeCreek

這樣做效果很好,但它相當笨重,並且在更新到新路徑名時很容易出錯。 如果有辦法讓批處理文件自動更新到保存文件本身的目錄的路徑,我會很高興的 這樣我就可以將批處理文件粘貼到新的 model 輸入的目錄中,而無需我手動打開文件並復制/粘貼新的路徑名。

我不確定這是否是批處理文件在初始化 python 之前可以一起完成的事情,或者 python 是否必須以某種方式回顧用於初始化它的文件的路徑? 也許這根本不可能做到? 也許我不知道我在說什么,應該把我的 2 美分留給自己?

希望解釋相對清楚......任何幫助將不勝感激。 對於知道自己在做什么的人來說,這可能很簡單。 但如果這還不是很明顯,我不是那些人中的一員。

我心中的問題是,你為什么要費心 cd'ing 到包含 run_project.py 的目錄?

為什么你認為這是必要的? 如果您不這樣做,那么您似乎不需要數據文件的絕對路徑。

只需使用

python C:\model\scripts\run_project.py button-down-president

我建議遵循更好的解決方案。

首先使用以下命令行創建一個批處理文件:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Assign the folder path passed to batch file to environment variable FolderPath.
set "FolderPath=%~1"
rem Use the batch file path if started without a folder path argument.
if not defined FolderPath set "FolderPath=%~dp0"
rem Remove all double quotes from folder path.
set "FolderPath=%FolderPath:"=%"
if not defined FolderPath set "FolderPath=%~dp0"
rem Replace all slashes by backslashes in folder path.
set "FolderPath=%FolderPath:/=\%"
rem Make sure the folder path ends with a backslash.
if not "%FolderPath:~-1%" == "\" set "FolderPath=%FolderPath%\"
rem Check the existence of this folder and run Python on folder existing.
if exist "%FolderPath%" cd /D "C:\model\scripts" && python.exe "run_project.py" "%FolderPath%"
rem Restore the initial execution environment which includes the initial current directory.
endlocal

此批處理文件應存儲在環境變量PATH中列出的文件夾之一中。 Run in a command prompt window set path to get output the two environment variables PATH and PATHEXT used by cmd.exe to find executables like python.exe and scripts like the batch file with the command lines above.

然后,只需雙擊它即可運行批處理文件,將其復制到包含要處理的文件的文件夾中,以及從命令提示符 window 中運行,其中文件夾路徑作為在命令提示符 window 中輸入的參數,最好使用文件/文件夾如使用幫助 output on running cmd /? 在命令提示符 window 中。

但最有用的是右鍵單擊最終文件夾中的批處理文件,然后在上下文子菜單中左鍵單擊發送到菜單項桌面(創建快捷方式) 接下來選擇在用戶桌面上創建的快捷方式文件,使用Ctrl+X剪切並使用Ctrl+V粘貼到文件夾%APPDATA%\Microsoft\Windows\SendTo中,該文件夾通常會擴展為C:\Users\UserName\AppData\Roaming\Microsoft\Windows\SendTo

這使得可以在 Windows 文件資源管理器中的任何文件夾上單擊鼠標右鍵,然后在子菜單中打開的上下文菜單中單擊鼠標左鍵 根據快捷方式文件的名稱發送到菜單項的名稱,以使用完整的限定文件夾名稱啟動批處理文件右鍵單擊的文件夾作為 Windows 文件資源管理器傳遞給批處理文件的第一個參數。 因此,批處理文件可用於任何文件夾,無需復制批處理文件或在命令提示符 window 中手動輸入文件夾路徑。

即使在手動輸入文件夾路徑的命令提示符 window 中錯誤使用時,批處理文件也盡可能避免故障,作為運行批處理文件的參數可能不正確。 批處理文件也可以從另一個批處理文件中調用,而不會影響父批處理文件環境。

可以刪除以rem開頭的命令行,因為這些只是解釋代碼的注釋。

要了解使用的命令及其工作原理,請打開命令提示符window,在其中執行以下命令,並仔細閱讀每個命令顯示的所有幫助頁面。

  • call /? ...解釋%~dp0%~1
  • cd /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?

另請參閱使用 Windows 批處理文件的多條命令的單行,以了解運算符&&的說明,僅當將當前目錄更改為C:\model\scripts成功時才運行python.exe ,但誰應該保證未來的數據腳本成功。

通常,為了避免常見執行項目的路徑問題,將這些項目安裝到路徑之外的文件夾中。 例如,如果您打開“Anaconda Prompt”並運行命令“openssl”,它會在不關心您所在的目錄的情況下運行。 這是因為 Anaconda 將 openssl 安裝到文件夾.../Anaconda3/Library/bin 並將此路徑添加到系統查找的路徑中。 你也可以自己做。

  1. 創建文件夾,例如 C:\Scripts。
  2. 將所述文件夾添加到您的系統 PATH 或您的 PYTHONPATH。 Windows菜單,運行,輸入“systempropertiesadvanced”,彈出打開菜單,點擊環境變量。 如果您願意,現在可以添加另一條路徑。
  3. 將 run_project.py 文件放入文件夾中。
  4. 打開任何終端並輸入“python run_project.py”,無論您的終端位置在哪里。

您可以通過將以下內容放入批處理文件中來執行此操作:

cd /d %~dp0

cd /d移動到相關目錄,即使該目錄位於另一個驅動器上。 %~dp0部分擴展到腳本的目錄(有關更多詳細信息,請參閱此答案)。

關於使用 PYTHONPATH 環境變量的另一個答案也是做你想做的事的好方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM