[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] a.bat 调用 a.ps1 ,传递 %* 会丢失第一个参数

a.bat
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. :Loop
  4. echo %1
  5. shift /1
  6. if not "%1" == "" goto :Loop
  7. powershell.exe -ExecutionPolicy Bypass -File "%~n0.ps1" %*
  8. pause
  9. exit/b
复制代码
a.ps1
  1. param(
  2.     [string[]]$args
  3. )
  4. $args.gettype()
  5. $args.length
  6. foreach ( $a in $args ) {
  7. Write-Host "Received arguments: $a"
  8. }
复制代码
把几个文件拖到bat上,第一个文件传递不到 ps
why?

回复 1# newswan


    和a.bat没关系,  直接运行a.ps1 1 2 3  也是缺一个
我把下面的删除了就不缺了,新手不是很懂param
param(
    [string[]]$args
)

TOP

回复 2# pd1


对,以前没加,这是ai给的,才发现有这问题。原理是啥?

TOP

和自动变量$args冲突了吧

TOP

  1. param(
  2. [string[]]$Para
  3. )
  4. $Para.gettype()
  5. $Para.length
  6. foreach ( $a in $Para ) {
  7. Write-Host "Received arguments Para: $a"
  8. }
  9. foreach ( $a in $args ) {
  10. Write-Host "Received arguments args: $a"
  11. }
复制代码
  1. param(
  2. [string[]]$Para ,
  3. [string[]]$args
  4. )
  5. $Para.gettype()
  6. $Para.length
  7. foreach ( $a in $Para ) {
  8. Write-Host "Received arguments Para: $a"
  9. }
  10. foreach ( $a in $args ) {
  11. Write-Host "Received arguments args: $a"
  12. }
复制代码

TOP

$args 没有声明,包含未被声明的参数
$args 声明,丢失一个参数,包含剩余未被声明的参数

TOP

回复 4# buyiyang


TOP

返回列表