none
PowerShell工作目錄與相對路徑問題 RRS feed

  • 問題

  • 先以(Set-Location -LiteralPath "路徑")成功切換工作目錄
    若工作目錄中含有'['或']'字元時:
    1. Test-Path判斷絕對路徑時正常,但相對路徑皆回傳False。
    2. Start-Process無論是否使用相對路徑皆無法執行作業。

    為何如此? 這是否正常行為? 謝謝...

    測試用檔案路徑:
    "C:\ffmpeg\bin\ffmpeg.exe"
    "D:\test videos\[test] video 1.mp4"
    "D:\[test] videos\[test] video 1.mp4"

    PS C:\Users\Owner> Set-Location D:\
    PS D:\> Test-Path -LiteralPath "D:\test videos\[test] video 1.mp4"
    True
    PS D:\> Test-Path -LiteralPath "D:\[test] videos\[test] video 1.mp4"
    True
    PS D:\> Set-Location -LiteralPath "D:\test videos"
    PS D:\test videos> Test-Path -LiteralPath "[test] video 1.mp4"
    True
    PS D:\test videos> Set-Location -LiteralPath "D:\[test] videos"
    PS D:\[test] videos> Test-Path -LiteralPath "[test] video 1.mp4"
    False
    
    照上一個命令結果來看 最後一個 Test-Path 照預期來說應該回傳 Ture 才對
    對於相對路徑,我只能想到用拐彎的方式繞開
    
    PS D:\[test] videos> Test-Path -LiteralPath $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("[test] video 1.mp4")
    True
    
    PS D:\[test] videos> $env:Path = "C:\ffmpeg\bin;" + $env:Path
    PS D:\[test] videos>  Start-Process -FilePath "ffmpeg" -ArgumentList '-i "[test] video 1.mp4" -c copy "[test] video 1.mkv"' -NoNewWindow -PassThru -Wait
    Start-Process : 無法執行作業,因為萬用字元路徑 D:\[test] videos 無法解析成檔案。
    
    Start-Process 這個錯誤有點讓人疑惑
    已經先以(Set-Location -LiteralPath "路徑")成功切換了工作目錄
    照理說不應該因為工作目錄路徑導致錯誤
    為了避免這個問題我必須另外使用 -WorkingDirectory 手動設定工作目錄
    
    PS D:\[test] videos>  Start-Process -FilePath "ffmpeg" -WorkingDirectory 'D:\`[test`] videos' -ArgumentList '-i "[test] video 1.mp4" -c copy "[test] video 1.mkv"' -NoNewWindow -PassThru -Wait
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
         30       3      428       2068       0.00   6312   1 ffmpeg
    ffmpeg version 4.3.1-2020-10-01-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
    #~~~ 中間省略 ~~~
    frame=33252 fps=0.0 q=-1.0 Lsize=   72342kB time=00:22:15.85 bitrate= 443.6kbits/s speed=2.81e+03x
    video:57093kB audio:14589kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.920864%
    #結果正常


    • 已編輯 KalvanLi 2020年10月27日 下午 05:55 補充說明
    2020年10月26日 上午 09:11