2016-03-31 3 views
0

Я получаю выборку файла из другого обсуждения, и я хочу изменить значение InitialDirectory. Сейчас есть:Batch + Powershell file chooser - 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 } 

и он открывает текущий каталог, но я хочу открыть подпапку. Как я могу записать Batch «% cd% \ UCSM_Files \» в InitialDirectory?

Извините за мой плохой английский

ответ

1

Вы можете сделать это несколькими способами, на самом деле. Самый короткий путь будет оценивать pwd внутри $() в строку, как это:

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

Или вы можете использовать строку форматирования.

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

С переменного синтаксисом это выглядит, как вы пытаетесь сделать это в PowerShell уже. Если да, то вы можете использовать Join-Path командлет (и автоматическую переменную $PWD):

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

(Обновленный код обсуждения) Я изменил '$ f.InitialDirectory = PWD' до '$ f.InitialDirectory = Join-Path -Path $ PWD -ChildPath UCSM_Files', но теперь папка открытых документов – Blank517

0

Вы можете попробовать установить переменную окружения в вашей партии, то использовать его в PowerShell:

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

Я также заметил вы отключите мультиселекцию, но затем все равно выполните проверку:

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

Если вы» любопытно, [это источник] (http://stackoverflow.com/a/15885133/1683264) сценария OP. Причиной строки 'if ($ f.Multiselect) является то, что человек, заимствовавший мой код, должен изменить одно значение для переключения нескольких файлов. Фактически, после размышления, я, вероятно, мог бы просто использовать '$ f.FileNames' для любого условия, независимо от того, является ли' $ f.Multiselect' истинным или ложным. Вероятно, я все еще думал о C# во время моего последнего редактирования. :) – rojo