powershell命令到批处理-它不工作

a9wyjsp7  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(212)

我想运行一个powershell命令批处理。我的powershell命令:

gc 'C:\Users\Test\Test-01\source.csv' | %{
    $cols = $_.split(";")
    1..$cols[-2]| %{
        "$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);"
    }
} | sc "C:\Users\Test\Test-01\target.csv"

我的批处理命令:

powershell -Executionpolicy ByPass gc 'C:\Users\Test\Test-01\source.csv' | %{
        $cols = $_.split(";")
        1..$cols[-2]| %{
            "$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);"
        }
    } | sc "C:\Users\Test\Test-01\target.csv"

它不工作。但是为什么?有人能告诉我为什么吗?

eyh26e7m

eyh26e7m1#

要将PowerShell代码嵌入到.BATch文件中,您只需注意一些细节:

  • 删除所有-ExecutionPolicy-Command的东西。只需在powershell命令后编写纯powershell代码。
  • 用插入符号终止每一行:^
  • 用分号终止每个 * 完整的powershell命令 *:;
  • 用反斜杠转义每个引号:\"like this\" * 或 * 通过撇号更改它们:'like this'

这些修改是必需的,因为批处理文件的特殊字符:

  • 重复百分号:%%
  • 转义这些字符:| > < &带插入符号,如下所示:^| ^> ^< ^&

在你的例子中,这是最终的工作代码:

powershell  ^
gc 'C:\Users\Test\Test-01\source.csv' ^| %%{  ^
    $cols = $_.split(\";\");  ^
    1..$cols[-2]^| %%{  ^
        \"$($cols[0..9] -join ';');$($cols[(9+$_)] -join ';');$($cols[(24+$_)] -join ';');;;;;;;;;;;;;;;$($cols[-2]);\"  ^
    }  ^
} ^| sc \"C:\Users\Test\Test-01\target.csv\"

您也可以查看this question

相关问题