2016-03-31 28 views
0

我從另一個討論中得到一個文件選擇器,我想更改InitialDirectory值。現在是:批量+ Powershell文件選擇器 - InitialDirectory

<# : 
... 
setlocal 
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') 
... 
goto :EOF 
: #> 
Add-Type -AssemblyName System.Windows.Forms 
$f = new-object Windows.Forms.OpenFileDialog 
$f.InitialDirectory = pwd 
$f.Filter = "ucsdb backup (ucsdb.*)|ucsdb.*" 
$f.ShowHelp = $false 
$f.Multiselect = $false 
[void]$f.ShowDialog() 
if ($f.Multiselect) { $f.FileNames } else { $f.FileName } 

它打開當前目錄,但我想打開一個子文件夾。我如何在InitialDirectory中編寫批處理「%cd%\ UCSM_Files \」?

對不起我的英文不好

回答

1

你可以做幾種方法,真的。最短的方法是在這樣的字符串來評估內$()pwd

$f.InitialDirectory = "$(pwd)\UCSM_Files" 

或者你可以使用字符串格式化。

$f.InitialDirectory = "{0}\UCSM_Files" -f (pwd) 
0

從變量語法看起來你正在試圖做到這一點在PowerShell中了。如果是這樣,你可以使用Join-Path cmdlet的(和$PWD自動變量):

$f.InitialDirectory = Join-Path -Path $PWD -ChildPath UCSM_Files 
+0

(更新討論代碼)我已經修改了 '$ f.InitialDirectory = PWD' 到 '$ f.InitialDirectory =聯接路徑-Path $ PWD -ChildPath UCSM_Files' 但是現在開放的文檔文件夾 – Blank517

0

你可以嘗試在批處理設置環境變量,然後在PowerShell中使用它:

<# : 
... 
set "initialdir=%~dp0" 
... 
#> 
$f.InitialDirectory = "$($env:initialdir)UCSM_Files" 
... 

我還注意到你禁用multiselect,但無論如何檢查它:

$f.Multiselect = $false 
if ($f.Multiselect) { $f.FileNames } else { $f.FileName } 
+0

如果」 re好奇,[這是源代碼](http://stackoverflow.com/a/15885133/1683264)OP的腳本。 'if($ f.Multiselect)'行的原因是借用我的代碼的人只需更改一個值即可切換多個文件選擇。實際上,經過反思,無論$ f.Multiselect是true還是false,我可能都可以使用'$ f.FileNames'作爲條件。儘管我在編輯過程中可能仍然在考慮C#。 :) – rojo