Batch + Powershell文件选择器 - InitialDirectory

时间:2016-03-31 21:23:52

标签: powershell batch-file

我从另一个讨论中得到一个文件选择器,我想更改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&#34;%cd%\ UCSM_Files \&#34;在InitialDirectory?

抱歉我的英文不好

3 个答案:

答案 0 :(得分:1)

你可以采取多种方式,真的。最简单的方法是在pwd中评估$()字符串中的$f.InitialDirectory = "$(pwd)\UCSM_Files"

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

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

df

答案 1 :(得分:0)

从变量语法看,您似乎已经尝试在PowerShell中执行此操作。如果是这样,您可以使用Join-Path cmdlet(以及$PWD自动变量):

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

答案 2 :(得分:0)

您可以尝试在批处理中设置环境变量,然后在powershell中使用它:

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

我还注意到你禁用了multiselect但是无论如何都要检查它:

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