在 windows 批处理文件中使用 PowerShell 命令的输出
Using output from a PowerShell command in a windows batch file
我在变量(脚本参数)中有一个路径 %2
。
我需要执行以下操作:
- 将叶子(路径中的最后一个文件夹)提取到一个变量。
- 运行 以下命令:
robocopy %2 \somepath\%leaf
有人告诉我这可以在 PowerShell 中完成(因为我尝试单独使用批处理文件但惨遭失败)这是我想要实现的伪代码表示:
set leaf = powershell -command (split-path %2 -leaf)
robocopy %2 \somepath\%leaf
知道如何正确编写吗?
谢谢。
只要您想将批处理变量设置为命令的输出,请使用 for /f
。这是一个例子:
@echo off
setlocal
set "psCommand=powershell -command "(split-path '%~2' -leaf)""
for /f "delims=" %%I in ('%psCommand%') do set "leaf=%%I"
echo %leaf%
但这是一种检索路径最后一个文件夹的非常低效的方法。您 应该 做的不是调用 PowerShell:
@echo off
setlocal
for %%I in ("%~2") do set "leaf=%%~nxI"
echo %leaf%
%%~dpnxI
符号得到
- d = 驱动器
- p = 路径
- n = 姓名
- x = 扩展名
它传统上用于文件,而不是目录;但无论如何它对目录也同样有效。有关完整详细信息,请参阅控制台 window 中 for /?
的最后几页。
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO ECHO %%~nxb
批量单行。获取参数(这里是第二个参数),删除所有引号并重新应用它们。 Select 驱动器和路径,添加'.'然后 select 需要制作 leaf 的结果的名称和扩展名。
显然,如果您在变量中需要这个,
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO set "leaf=%%~nxb"
我在变量(脚本参数)中有一个路径 %2
。
我需要执行以下操作:
- 将叶子(路径中的最后一个文件夹)提取到一个变量。
- 运行 以下命令:
robocopy %2 \somepath\%leaf
有人告诉我这可以在 PowerShell 中完成(因为我尝试单独使用批处理文件但惨遭失败)这是我想要实现的伪代码表示:
set leaf = powershell -command (split-path %2 -leaf)
robocopy %2 \somepath\%leaf
知道如何正确编写吗? 谢谢。
只要您想将批处理变量设置为命令的输出,请使用 for /f
。这是一个例子:
@echo off
setlocal
set "psCommand=powershell -command "(split-path '%~2' -leaf)""
for /f "delims=" %%I in ('%psCommand%') do set "leaf=%%I"
echo %leaf%
但这是一种检索路径最后一个文件夹的非常低效的方法。您 应该 做的不是调用 PowerShell:
@echo off
setlocal
for %%I in ("%~2") do set "leaf=%%~nxI"
echo %leaf%
%%~dpnxI
符号得到
- d = 驱动器
- p = 路径
- n = 姓名
- x = 扩展名
它传统上用于文件,而不是目录;但无论如何它对目录也同样有效。有关完整详细信息,请参阅控制台 window 中 for /?
的最后几页。
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO ECHO %%~nxb
批量单行。获取参数(这里是第二个参数),删除所有引号并重新应用它们。 Select 驱动器和路径,添加'.'然后 select 需要制作 leaf 的结果的名称和扩展名。
显然,如果您在变量中需要这个,
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO set "leaf=%%~nxb"