批处理脚本:
@echo off
if not "!!"=="" setlocal enabledelayedexpansion
for /f "tokens=4*" %%a in (
'dir /AD "%USERPROFILE%\" ^| find "DIR" ^| Find /v " ."'
) do if "%%b"=="" (set $dirs=!$dirs!"%%a" ) else (set $dirs=!$dirs!"%%a %%b" )
call :getmaxlen !$dirs!
echo Dirs !$dirs!
echo maklen '%max%'
pause
:getmaxlen
set var=%*
for %%a in (!var!) do (
set #L=%%~a
for /L %%a in (0 1 100) do if not "!#L:~%%a,1!"=="" set len=%%a
set /a len+=1& set "$Lens=!$Lens!!len! "
)
for %%a in (!$Lens!) do (
if not defined max Set max=%%a
if %%a GTR !max! Set max=%%a
)
exit /b
PowerShell 脚本:
function demo {
$dirs = (gci $Home -Directory -force).Name
getmaxlen
"max len $max"
pause
}
function getmaxlen {
$var = $dirs
#$var =???
$Script:max = ($var | Measure -Maximum -Property Length).Maximum
}
demo
set var=%*
从上面的批处理脚本中, PowerShell 调用函数中相当于什么?
我指的是%*
PowerShell 中的等效项。$var =???
function getmaxlen
所以。我可以在任何时候使用 Powershell 。
答案1
批处理和 PowerShell 传递参数的机制没有可比性。
基本上,PowerShell 使用两个内置变量:
- $参数 对于未声明的参数。
- $PSBound参数 对于声明的参数。
一些可以帮助您入门的参考资料:
答案2
根据帖子中的回答:Powershell 中与 bash $* 等效的是什么?
function demo {
$dirs = (gci $Home -Directory -force).Name
getmaxlen $dirs
$max; pause; CLS
$dirs = (gci / -Directory -force).Name
getmaxlen $dirs
$max; pause; CLS
$dirs = (gci $env:Windir -Directory -force).Name
getmaxlen $dirs
$max; pause; exit 0
}
function getmaxlen {
param ()
$var = $args | foreach {$_}
$Script:max = ($var | Measure -Maximum -Property Length).Maximum
}
demo
在 PowerShell 中可以使用:
param()
$var = $args | foreach {$_}
因此function getmaxlen
可以重复调用