首頁>Program>source

我使用此指令碼查詢帶有.bat檔案的当前檔案夹:

for /f %%i in ("%0") do set curpath=%%~dpi 
echo  %curpath%

如果路徑包含空格(D:\ Scripts \ All Scripts->仅檢索D:\ Scripts \,如果我放置在其路徑中没有空格的檔案夹中,它將檢索 完整路徑).我该如何解決?

18

cmd

最新回復
  • 6月前
    1 #

    2015-03-30:已編輯-已添加缺少的資訊

    要檢索当前目錄,可以使用動態 %cd% 包含当前活動目錄的變數

    set "curpath=%cd%"
    

    這將為根目錄生成一个帶有反斜杠結尾的值,而對於其餘目錄則不帶反斜杠.您可以使用

    對任何目錄強製加反斜杠
    for %%a in ("%cd%\") do set "curpath=%%~fa"
    

    或者您可以使用另一个動態變數: %__CD__% 会返迴当前活動目錄並帶有反斜杠。

    另外,請記住 %cd% 變數可以直接分配一个值.在這種情况下,返迴的值將不是当前目錄,而是分配的值.您可以通過引用当前目錄来防止這種情况

    for %%a in (".\") do set "curpath=%%~fa"
    

    在windows XP或windows XP上 變數具有相同的行為.它可以被使用者覆盖,但是至少从windows 7(我無法在Vista上測試)上,對 %__CD__%所做的任何更改 是允许的,但是在讀取變數時,更改的值將被忽略,並且將檢索正確的当前活動目錄(註意:使用 %__CD__%更改後的值仍然可见) 命令)。

    所有先前的代碼都会返迴当前活動目錄,而不是儲存批處理檔案的目錄.

    set
    

    它將返迴批處理檔案的儲存目錄,並以反斜杠結尾。

    但是如果在批處理檔案中 set "curpath=%~dp0",則此操作將失败 命令已使用

    shift
    

    由於批處理檔案的引數已轉移,因此 shift echo %~dp0 對当前批處理檔案的引用丢失.

    為防止這種情况,您可以在进行任何移位之前檢索對批處理檔案的引用,或將語法更改為 %0 確保移位操作將从第一个引數開始,而不影响對批處理檔案的引用.如果您不能使用任何一个此選項,則可以在對子例程的呼叫中檢索對当前批處理檔案的引用

    shift /1
    

    如果在呼叫批處理檔案名時引用了批處理檔案名並且未使用完整引用(在此處阅讀),則也可能需要這種方法。

  • 6月前
    2 #

    @echo off
        setlocal enableextensions
        rem Destroy batch file reference
        shift
        echo batch folder is "%~dp0"
        rem Call the subroutine to get the batch folder 
        call :getBatchFolder batchFolder
        echo batch folder is "%batchFolder%"
        exit /b
    :getBatchFolder returnVar
        set "%~1=%~dp0" & exit /b
    

    for /f "delims=" %%i in ("%0") do set "curpath=%%~dpi"
    echo "%curpath%"
    

    如果路徑包含任何 echo "%cd%",則需要双引號 字元。

  • 6月前
    3 #

    使用此代碼

    &
    

    (迴顯此代碼以確认此代碼工作正常)

    @echo off :: Get the current directory for /f "tokens=* delims=/" %%A in ('cd') do set CURRENT_DIR=%%A echo CURRENT_DIR%%A

  • java:从句子中产生N-gram
  • javascript:仅使用網址而不打開新視窗来print網頁?