找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21614|回复: 6

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

[复制链接]
发表于 2024-5-18 00:33:39 | 显示全部楼层 |阅读模式
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?
发表于 2024-5-18 10:21:44 | 显示全部楼层
回复 1# newswan


    和a.bat没关系,  直接运行a.ps1 1 2 3  也是缺一个
我把下面的删除了就不缺了,新手不是很懂param
param(
    [string[]]$args
)
 楼主| 发表于 2024-5-18 10:59:33 | 显示全部楼层
回复 2# pd1


对,以前没加,这是ai给的,才发现有这问题。原理是啥?
发表于 2024-5-18 11:34:50 | 显示全部楼层
和自动变量$args冲突了吧
 楼主| 发表于 2024-5-18 21:29:51 | 显示全部楼层

  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. }
复制代码
 楼主| 发表于 2024-5-18 21:31:55 | 显示全部楼层
$args 没有声明,包含未被声明的参数
$args 声明,丢失一个参数,包含剩余未被声明的参数
 楼主| 发表于 2024-5-18 21:45:22 | 显示全部楼层
回复 4# buyiyang


您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:28 , Processed in 0.025595 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表