我里面有一个powershell命令,它同时包含双引号和单引号,并且为了使该命令在dos提示符下成功执行,肯定需要使用该命令。我不确定如何使其在管道脚本中转义。
at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:71)
at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:81)
at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:96)
at com.joinf.hbase.exportData.toMySQL.SparkOnSQLReplaceToHbase$$anonfun$main$1.apply(SparkOnSQLReplaceToHbase.scala:98)
at com.joinf.hbase.exportData.toMySQL.SparkOnSQLReplaceToHbase$$anonfun$main$1.apply(SparkOnSQLReplaceToHbase.scala:96)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2118)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2118)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
at org.apache.spark.scheduler.Task.run(Task.scala:121)
at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
在以上命令中,您可以看到“倒数第二个”是“获取内容”的结尾引号,而最后一个是“ bat”命令。 我用三斜杠尝试了上面的命令,但出现了错误提示。
bat "powershell -Command "(Get-Content "${Physical_FolderLoc}\\${Stord_Process_Name}.txt") | ForEach-Object { $_ -replace [RegEx]::Escape('E:\\config'), 'I:\\config' } | Set-Content "${Physical_FolderLoc}\\${Stord_Process_Name}.txt" " "
请帮助我解决这个问题。
答案 0 :(得分:0)
更改每个内部双引号字符串,例如:
"${Physical_FolderLoc}\\${Stord_Process_Name}.txt"
收件人:
('{0}\\{1}.txt' -f $Physical_FolderLoc, $Stord_Process_Name)
答案 1 :(得分:0)
我确切地知道了为什么命令没有转义。 powershell命令中有一个独立的 $ 符号,它也是groovy的系统字符,因此也需要转义。(后面的 $ 字符 ForEach-Object {)。现在以\为前缀,所以转义了。
现在完整的命令是:
bat "powershell -Command \"(Get-Content ${Physical_FolderLoc}\\${Stord_Process_Name}.txt) | ForEach-Object { \$_ -replace [RegEx]::Escape('E:\\config'), 'I:\\config' } | Set-Content ${Physical_FolderLoc}\\${Stord_Process_Name}.txt\" "
虽然没有人尝试提供帮助,但是仍然非常感谢您的建议。