CMD脚本转换为PowerShell脚本的思路及正确性咨询
CMD转PowerShell脚本修正说明
你的整体思路是正确的,调整变量声明、变量引用规则确实是CMD转PowerShell的核心第一步,但现有编写版本还有几处问题需要修正:
- 变量作用域错误:你用
$env:前缀声明的是系统环境变量,会污染全局环境配置,原CMD中setlocal对应的是脚本局部变量,直接用$变量名声明即可,不需要加$env:前缀。 - 参数引用错误:CMD中的
%1/%2/%3是位置参数标识,PowerShell中对应的是自动变量$args[0]/$args[1]/$args[2],不能继续使用%格式的参数写法。 - 可执行文件调用错误:直接写
"$java_home\bin\java"会被PowerShell识别为普通字符串输出,不会执行程序,需要添加调用运算符&触发执行。 - 长参数分隔问题:
-classpath参数中包含多个分号,PowerShell会默认把分号识别为语句分隔符,需要给整段classpath值加引号避免解析错误。
修正后的完整脚本如下:
# 对应原CMD的@echo On,显示执行的命令 Set-PSDebug -Trace 1 # 声明局部变量,对应原CMD的setlocal+set $base_dir = "D:\Temp\peijun\LoadLegacyDocs" $java_home = "D:\Programs\jre6.31" $environment = "stg" $result = "logs\$environment\$($args[0]).properties" # 调用java执行命令,classpath用引号包裹避免分号解析错误 & "$java_home\bin\java" -javaagent:"$base_dir\lib\openejb-3.1.4\lib\openejb-javaagent-3.1.4.jar" ` -classpath "$base_dir\config\$environment;$base_dir\lib\openejb-3.1.4\lib\*;$base_dir\lib\jar\*;$base_dir\lib\common_lib\*;d:\documentum\config;d:\Programs\Documentum\dctm.jar" ` -Dlog4j.configuration="file:///$base_dir/config/$environment/log4j.properties" ` com.eds.jdc.util.LoadLegacyDocs $args[0] $args[1] $args[2]
补充说明:脚本末尾的反引号是PowerShell的换行符,用于拆分过长的命令行提升可读性,不需要换行可以直接删掉反引号把命令拼成一行。
内容的提问来源于stack exchange,提问作者jakebake
相关产品推荐
相关产品推荐

