将PowerShell命令保存在变量中,并在cmd中执行



我想将PowerSell命令保存在变量中并在cmd中执行问题:使用命令:$(get-location)获取exe文件的当前路径。路径

我试了一下,但不工作:

Set $path = powershell -Command $(get-location).Path
echo "$path"

尝试类似的命令行,注意我们需要转义第一个)使用^)

C:UsersKDesktop>for /f "delims=" %c in ('powershell -Command $(get-location^).Path') do @set "$path=%c"
C:UsersKDesktop>echo %$path%
C:UsersKDesktop
C:UsersKDesktop>

所以在批处理文件中使用

for /f "delims=" %%c in ('powershell -Command $(get-location^).Path') do @set "$path=%%c"
echo %$path%

然而,有许多更简单的方法来查找当前目录。

建议避免任何与"path"非常相似的变量名。例如$path,因为它可能被下游应用程序误解为剥离$,但在CMD级别最简单的方法是使用%cd%值:-

C:UsersKDesktop>set "ExDir=%cd%" & echo %ExDir%
C:UsersKDesktop
C:UsersKDesktop>

在批处理文件中,通常使用pushd和popd并存储%~dp0,但是在命令行中,popd可能没有可返回的目录堆栈,因此可以使用此方法。

C:UsersKDesktop>set "PopDir=%cd%"
C:UsersKDesktop>cd /d h:
H:>echo doing somthing in %cd%
doing somthing in H:
H:>cd /D "%PopDir%"
C:UsersKDesktop>

这里还有另一种方法,没有调用表达式,但有两个变量(命令:字符串和参数:数组)。这对我来说很好。假设7z.exe在系统路径下。

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:tempwith spacetest1.zip', 'C:TEMPwith spacechangelog'
& $cmd $prm

如果命令是已知的(7z.exe),并且只有参数是可变的,那么这将执行

$prm = 'a', '-tzip', 'c:tempwith spacetest1.zip', 'C:TEMPwith spacechangelog'
& 7z.exe $prm

顺便说一句,带一个参数的调用表达式也适用于我,例如:

$cmd = '& 7z.exe a -tzip "c:tempwith spacetest2.zip" "C:TEMPwith spacechangelog"'
Invoke-Expression $cmd

注:我通常更喜欢使用参数数组的方式,因为以编程方式组合比为Invoke-Expression构建表达式更容易。

最新更新