我在变量(脚本参数)%2
中有一个路径。
我需要做以下事情:
robocopy %2 \\somepath\%leaf
有人告诉我这可以在PowerShell中完成(因为我已经尝试单独使用批处理文件并且失败了)这里是我想要实现的伪代码表示:
set leaf = powershell -command (split-path %2 -leaf)
robocopy %2 \\somepath\%leaf
知道怎么写这个吗? 谢谢。
答案 0 :(得分:2)
每当您想要将批处理变量设置为命令的输出时,请使用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
符号
它传统上用于文件而不是目录;但它无论如何都适用于目录。有关详细信息,请参阅控制台窗口中for /?
的最后几页。
答案 1 :(得分:0)
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO ECHO %%~nxb
批量单行。取参数(此处为第二个参数),删除任何引号并重新应用它们。选择驱动器和路径,添加'。'然后选择所需结果的名称和扩展名。
显然,如果你在变量中需要这个,
FOR %%a IN ("%~2") DO FOR %%b IN ("%%~dpa.") DO set "leaf=%%~nxb"