繁体   English   中英

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

[英]save PowerShell command in variable and execute in cmd

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

我尝试这个但不工作:

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

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

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

C:\Users\K\Desktop>echo %$path%
C:\Users\K\Desktop

C:\Users\K\Desktop>

所以在批处理文件中使用

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

但是,有许多更简单的方法可以找到当前目录。

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

C:\Users\K\Desktop>set "ExDir=%cd%" & echo %ExDir%
C:\Users\K\Desktop

C:\Users\K\Desktop>

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

C:\Users\K\Desktop>set "PopDir=%cd%"

C:\Users\K\Desktop>cd /d h:

H:\>echo doing somthing in %cd%
doing somthing in H:\

H:\>cd /D "%PopDir%"

C:\Users\K\Desktop>

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

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

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

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

顺便说一句,带有一个参数的 Invoke-Expression 也适用于我,例如这有效

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM