🧩Java .jar 執行後輸出檔到底存在哪?給完全不懂也能看懂的圖文教學(含 CMD/PowerShell 範例)

 

TL;DR(先講重點)

當你在 Windows 以 java -jar xxx.jar 執行工具、而日誌裡寫著
convert <輸入完整路徑> to <輸出檔名>.txt(注意:右邊只有檔名沒有路徑)時——
輸出檔通常會被寫到你執行指令當下的「目前工作目錄」(Current Working Directory, CWD)。
如果工具本身有設定「輸出目錄」或把輸出放在「來源檔同層」,那就改去那些位置找。


為什麼「輸出檔不見了」?

很多轉檔或資料處理的 .jar 工具,若沒有明確指定輸出路徑,就會把結果寫到目前工作目錄
你可以把「目前工作目錄」想成:「我現在站在的資料夾」。

  • 在命令列(CMD/PowerShell)輸入指令時,站在哪存到哪

  • 若日誌顯示 to example.stdf.gz.txt(只有檔名),幾乎可判定是寫到目前工作目錄。


快速辨識:這種日誌代表什麼意思?

以下是改寫過、純示意的日誌格式(與真實專案無關):

convert E:\data\inputs\sample\ABC123_20250101_120000.stdf to ABC123_20250101_120000.stdf.txt convert E:\data\inputs\sample\DEF456_20250102_090000.stdf.gz to DEF456_20250102_090000.stdf.gz.txt
  • convert <輸入完整路徑>:讀的是哪個來源檔。

  • to <輸出檔名>.txt只有檔名、沒有路徑 → 大多寫到目前工作目錄


立刻查到檔案:最實用的兩段指令

方法 A:先看你當下站在哪(目前工作目錄)

CMD:

echo 目前工作目錄是:%cd% dir *.txt

PowerShell:

Get-Location Get-ChildItem -Filter *.txt

方法 B:全碟搜尋指定型態(遞迴找)

CMD:

dir /s /b C:\Users\Alice\*.stdf*.txt dir /s /b E:\data\inputs\*.stdf*.txt

PowerShell:

Get-ChildItem -Path C:\Users\Alice, E:\data\inputs -Recurse -Filter *.stdf*.txt ` | Sort-Object LastWriteTime -Descending ` | Select-Object -First 30 FullName, LastWriteTime

提醒:以上路徑是範例。請改成你實際的資料夾。



從此不再迷路:固定輸出位置的 3 種作法

作法 1:先切到你想放的資料夾再執行

CMD:

cd /d D:\exports\converted java -jar D:\tools\my-converter.jar

之後所有「只有檔名的輸出」都會落在 D:\exports\converted\

作法 2:看看工具是否支援「輸出目錄」設定

有些 .jar 會讀設定檔(例如 .properties / .yml),裡面可能有:

output.dir=D:/exports/converted

或支援參數:

java -jar my-converter.jar --output-dir D:\exports\converted

具體鍵名會因工具而異:常見像 outputDirout_pathexport.folder 等。


作法 3:檢視 JAR 內是否有可讀的設定檔(進階)

若你安裝了 JDK,可列出 JAR 內容找設定檔:

jar tf D:\tools\my-converter.jar | findstr /i "properties yml yaml conf"

找到檔名後,再把它解開(或參考工具文件)調整輸出路徑。


可能的例外:有些工具會把輸出放在「來源檔同層」

少部分工具的邏輯是:輸出就放在來源檔同一資料夾
如果你在目前工作目錄找不到,請也檢查來源檔所在處,如:

E:\data\inputs\sample\ E:\data\inputs\projectA\

實戰流程(一步步跟著做)

  1. 確認我現在站在哪

    • CMD:echo %cd%

    • PowerShell:Get-Location

  2. 在目前工作目錄找輸出

    • CMD:dir *.txt

    • PowerShell:Get-ChildItem -Filter *.txt

  3. 來源地點也掃一遍

    • CMD:dir /s /b E:\data\inputs\*.txt

    • PowerShell:Get-ChildItem -Path E:\data\inputs -Recurse -Filter *.txt

  4. 之後固定輸出

    • cd /d D:\exports\converted

    • java -jar D:\tools\my-converter.jar

  5. 能設定就設定

    • 查看工具是否支援 --output-dir 或在設定檔中設定 output.dir=...


常見問答(FAQ)

Q1:為什麼日誌只看到檔名、沒有完整路徑?
A:代表程式用的是「相對路徑」輸出,預設就是寫到目前工作目錄

Q2:我用批次檔 .bat 執行,輸出跑到怪地方?
A:批次檔內的 cd 位置、或從哪個資料夾直接雙擊 .bat,都會改變「目前工作目錄」。在 .bat 開頭加上:

@echo off cd /d D:\exports\converted

再跑 java -jar ...,輸出就固定下來了。

Q3:jar tf 失敗?找不到 jar 指令?
A:表示系統上可能只有 JRE、沒有 JDK。安裝 JDK 或把 JDK 的 bin 放到 PATH 之後再試。

Q4:PowerShell 找不到檔案,但我確定有?
A:確認有加 -Recurse(遞迴),並檢查檔案篩選條件(-Filter *.stdf*.txt)是否寫對。


小抄(可直接貼上改路徑就用)

找最近 30 個輸出(PowerShell)

$roots = @("C:\Users\Alice", "E:\data\inputs", "D:\exports\converted") Get-ChildItem -Path $roots -Recurse -Filter *.stdf*.txt ` | Sort-Object LastWriteTime -Descending ` | Select-Object -First 30 FullName, LastWriteTime

固定輸出到特定資料夾(CMD 批次檔)

@echo off set OUT=D:\exports\converted cd /d %OUT% java -jar D:\tools\my-converter.jar echo 輸出完成,請到 %OUT% 查看

總結

  • 日誌右邊 to 檔名.txt 沒有路徑 → 先到目前工作目錄找。

  • 找不到,再掃來源資料夾與你常用輸出夾

  • 想要穩定:cd 到你指定的輸出資料夾再執行,或設定工具的輸出路徑

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題