Hi各位大大,
想請問如何寫batch能夠取得某個檔案存在的路徑,然設定為變數?
用where可以取得路徑,但也會取得檔案名稱,希望有大大能夠傳授只取得路徑的指令!
感謝。
這個問題不錯唷,試試看以下方法:
最後的 _name 就是你要的變數
@echo off
:: set path as variable
:: haoming --2017-12-14 09:42:08
set theFile=20171211084103-0001.pdf
set _name=
echo before: %_name%
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m %theFile% /c "cmd /c echo @path"') do (
set _name=%%G
)
echo after: %_name%
endlocal
本來想直接在 forfiles 裡面接set , 但好像沒辦法這樣做。
所以多包一層。
參考這篇改的:
https://superuser.com/questions/1014835/variable-for-getting-absolute-path-in-windows-batch-script
@Echo Off
CD C:\Windows\System32
Echo %CD%
--顯示結果--
C:\Windows\System32
抱歉, 需求沒有說清楚。
目前知道檔案名稱是123.exe, 路徑不知道(也有可能case by case變化)
比方說是C:\123\123\123\123.exe
或是C:\123\456\123\123.exe
所以想知道有沒有辦法用cmd找到123.exe的檔案路徑(最好能因應每次變化取得正確路徑), 然後將路徑設為變數
後續可以利用變數去執行123.exe
感謝!!
需求還是很亂,為何路徑每次都會不同?有自己先寫好的虛擬碼嗎...
如果你確定檔案名稱都會是固定,就是加個迴圈去找,但這樣浪費效能,所以先說說為何路徑為何每次都要不同
用途主要是會將zip解壓縮, 不過壓縮包的名稱不固定, 所以解壓縮後的資料夾名稱不定, 導致要尋找壓縮包中的exe時, 檔案路徑是不固定的。不過第一層路徑是固定的, 因為有用7za解到固定的資料夾中。
試試看這個,PowerShell 的方式,$myDirectory 就是你要的答案了
$env:SystemRoot 改成你可能放檔案的最上層目錄名稱
notepad.exe 改成你的檔名
$myDirectory = Get-ChildItem $env:SystemRoot -Include "notepad.exe" -Recurse -ErrorAction SilentlyContinue | % { $_.DirectoryName }