将 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"
这是另一种没有 Invoke-Expression 但有两个变量(command:string 和 parameters:array)的方法。这对我来说可以。假设 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
P.S。我通常更喜欢使用参数数组的方式,因为以编程方式组合比为 Invoke-Expression 构建表达式更容易。
尝试类似的命令行,注意我们需要使用 ^)
转义第一个 )
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 可能没有到 return 的目录堆栈,因此可以使用此方法。
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>
我想将 PowerSell 命令保存在变量中并在 cmd 中执行 问题:使用命令获取 exe 文件的当前路径:$(get-location).Path
我尝试了这个但没有用:
Set $path = powershell -Command $(get-location).Path
echo "$path"
这是另一种没有 Invoke-Expression 但有两个变量(command:string 和 parameters:array)的方法。这对我来说可以。假设 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
P.S。我通常更喜欢使用参数数组的方式,因为以编程方式组合比为 Invoke-Expression 构建表达式更容易。
尝试类似的命令行,注意我们需要使用 ^)
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 可能没有到 return 的目录堆栈,因此可以使用此方法。
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>