我在批处理脚本中有一个字符串。我不想不想创建Powershell脚本或其他文件。
我想知道的所有信息,如何对通过批处理传递给powershell的字符串进行正则表达式替换。
我的解决方法:
powershell -Command " replace "%insert regex pattern%" , "%string_from_batch_file%"
我希望将此%string_from_batch_file%
替换为正则表达式匹配项。同样,我不在此命令之外处理文件或powershell,我只需要在字符串上使用正则表达式替换即可。
预先感谢
答案 0 :(得分:1)
您可以在这样的命令行上替换调用powershell的字符串
add_action( 'woocommerce_before_calculate_totals', 'change_custom_price' );
function change_custom_price( $cart_object ) {
$custom_price = 0; // This will be your custome price
$gift_variation_id = 2046;
foreach ( $cart_object->cart_contents as $value ) {
if ( $value['variation_id'] == $gift_variation_id ) {
$value['data']->price = $custom_price;
}
}
}
或更短的 cudo可以解决
PowerShell -Command "& {'yourstring' -replace 'your', 'my'}"
答案 1 :(得分:1)
以评论中的示例为例:
@Echo off
set "input=abced__xyz.ghi23"
set "regex=_[^]+$"
Echo expected output: [xyz.ghi23]
powershell -Command " replace "%insert regex pattern%" , "%string_from_batch_file%"
这不起作用,因为您使用了错误的语法。
另外,内部的双引号也必须转义,以便将cmd传递给powershell
(或更改为单引号)。
我至少看到了两个正则表达式来解决这个问题
'^.*?_+'
并替换为''
:: Q:\Test\2018\07\30\SO_51593067.cmd
@Echo off
set "input=abced__xyz.ghi23"
Echo expected output: [xyz.ghi23]
Echo 1st
powershell -NoP -C "'%input%' -replace '^.*?_+'"
Echo 2nd
powershell -NoP -C "'%input%' -replace '^.*?_+(.*)$','$1'"
示例输出:
> Q:\Test\2018\07\30\SO_51593067.cmd
expected output: [xyz.ghi23]
1st
xyz.ghi23
2nd
xyz.ghi23
如果您还想处理批处理文件中的powershell输出,
您必须使用for /f
解析powershell命令并将其存储在批处理变量中:
:: Q:\Test\2018\07\30\SO_51593067.cmd
@Echo off
set "input=abced__xyz.ghi23"
Echo expected output: [xyz.ghi23]
for /f "usebackq delims=" %%A in (`
powershell -NoP -C "'%input%' -replace '^.*?_+'"
`) Do Set "first=%%A"
for /f "usebackq delims=" %%A in (`
powershell -NoP -C "'%input%' -replace '^.*?_+(.*)$','$1'"
`) Do Set "second=%%A"
Echo first =%first%
Echo second=%second%
示例输出:
> Q:\Test\2018\07\30\SO_51593067.cmd
expected output: [xyz.ghi23]
first =xyz.ghi23
second=xyz.ghi23