Board logo

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

作者: newswan    时间: 2024-5-18 00:33     标题: 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?
作者: pd1    时间: 2024-5-18 10:21

回复 1# newswan


    和a.bat没关系,  直接运行a.ps1 1 2 3  也是缺一个
我把下面的删除了就不缺了,新手不是很懂param
param(
    [string[]]$args
)
作者: newswan    时间: 2024-5-18 10:59

回复 2# pd1


对,以前没加,这是ai给的,才发现有这问题。原理是啥?
作者: buyiyang    时间: 2024-5-18 11:34

和自动变量$args冲突了吧
作者: newswan    时间: 2024-5-18 21:29

  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. }
复制代码

作者: newswan    时间: 2024-5-18 21:31

$args 没有声明,包含未被声明的参数
$args 声明,丢失一个参数,包含剩余未被声明的参数
作者: newswan    时间: 2024-5-18 21:45

回复 4# buyiyang







欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2