PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理

简介: PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理

1.问题说明

有批量修改mapper文件的需求,从MySQL数据库语法修改到PostgreSQL语法。

2.实例分享

核心代码为:

@echo off
setlocal EnableDelayedExpansion
set "strOld=STR_TO_DATE"
set "strNew=TO_TIMESTAMP"
for /f %%i in ('dir /b /s /a:-d *.xml') do (
 pwsh -Command "
 (gc %%i) -replace '%strOld%', '%strNew%' | Out-File %%i -Encoding utf8 
 "
)

主要使用到的函数:

  • dir
  • gc
  • replace
  • Out-File

这里做个说明,powershell为低版本,pwsh是高版本,由于处理的文件里有utf8编码的中文,实用低版本的编码格式会转行成utf8bom格式导致乱码,故实用高版本。版本升级可去【官网下载】

# 使用到的
# 1.只显示下面所有的文件的文件名称信息 /B
DIR /B
# 2.显示所有子文件夹 /S
DIR /S 
# 3.只显示文件 /A:-D
DIR /A:-D
# 4.组合使用,显示子文件夹下所有文件名称
DIR /B /S /A:-D
# 未使用的
# 1.显示帮助  
DIR /?
# 2.只显示文件夹  /A:D
DIR /A:D
# 未使用的各种组合
# 1.组合使用,显示所有子文件夹下的文件 
DIR /S /A:-D
# 2.组合使用只显示所有子文件夹  /A:D
DIR /S /A:D
# 3.组合使用,显示所有子文件夹名称
DIR /B /S /A:D
# 4.把命令行执行结果输出到文件  >[filename]
DIR /B  >file01.txt
# 5.组合使用 
DIR /B /S /A:-D >file01.txt
# 6.文件的创建时间、修改时间和访问时间   /T:C  /T:A  /T:W
DIR /T:C  /A:-D

2.1 特殊字符%处理

@echo off
setlocal EnableDelayedExpansion
:: (1)替换 STR_TO_DATE 函数为 TO_TIMESTAMP
set "strOld1=STR_TO_DATE"
set "strNew1=TO_TIMESTAMP"
echo (1)Replac: STR_TO_DATE TO TO_TIMESTAMP
:: (2)替换 str_to_date 函数为 to_timestamp
set "strOld2=str_to_date"
set "strNew2=to_timestamp"
echo (2)Replac: str_to_date TO to_timestamp
:: (3)替换日期格式 %Y-%m-%d %H:%i:%s 为 YYYY-MM-DD hh24:mi:ss
set "strOld3=%%Y-%%m-%%d %%H:%%i:%%s"
set "strNew3=YYYY-MM-DD hh24:mi:ss"
echo (3)Replac: %%Y-%%m-%%d %%H:%%i:%%s TO YYYY-MM-DD hh24:mi:ss
for /f %%i in ('dir /b /s /a:-d *.xml') do (
 pwsh -Command "(gc %%i) -replace '%strOld1%', '%strNew1%' -replace '%strOld2%', '%strNew2%' -replace '!strOld3!', '%strNew3%' | Out-File %%i -Encoding utf8 "
)

%也是转义字符,MySQL的日期里也有%Y-%m-%d %H:%i:%s,这里要进行特殊处理,注意'!strOld3!'替换的时候用的不是%%而是用的!!

2.2 括号()及成对单引号处理’’

:: (4)替换 sysdate() 函数为 to_timestamp ( '' || now( ), 'YYYY-MM-DD hh24:mi:ss' )
set "strOld=sysdate\(\)"
set "strNew=to_timestamp(now() || '''',''YYYY-MM-DD hh24:mi:ss'')"
echo (4)Replac: "sysdate() TO to_timestamp (now()||'', 'YYYY-MM-DD hh24:mi:ss')"
for /f %%i in ('dir /b /s /a:-d *.xml') do (
 pwsh -Command "(gc %%i) -replace '!strOld!', '!strNew!' | Out-File %%i -Encoding utf8 "
)
  • sysdate\(\)
  • to_timestamp(now() || ‘’‘’,‘‘YYYY-MM-DD hh24:mi:ss’’)
目录
相关文章
|
SQL 运维 JavaScript
《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.6 修改SQL Server实例配置
1.通过“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打开PowerShell控制台。
1378 0