[英]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.