好的,所以我正在撰寫一個批處理檔案,其中在找到字串后洗掉包含“,”的每一行:“插件”:{ 是否可以在 for 回圈中創建此條件?
現在我知道你可以避免使用 ^ 參考,但我就是不能讓它作業。
我現在要做的是:
@echo OFF
::removePlugins
setlocal enabledelayedexpansion
echo. 2>tempPackage.json
SET @FOUND=0
for /F "delims=" %%G in (./package.json) do (
echo %%G|find "," > nul
if not errorlevel 1 (SET @FOUND=1)
if !@FOUND!==1(
@echo ON
SET @FOUND=0
ECHO: >> tempPackage.json
@echo OFF
)
ECHO %%G>>tempPackage.json
)
move "./tempPackage.json" ".package.json"
所以在這種情況下,我只會在包含“,”的每一行中創建一個新行。那么如何撰寫一個僅從該字串向前執行而不是創建新行而是將其洗掉的 for 回圈呢?
該檔案包含如下內容:
{
"scripts"{ random scripts},
"dependencies"{ random dependencies},
"cordova": {
"platforms": [],
"plugins": {
"cordova-plugin-app-version": {},
"cordova-plugin-crosswalk-data-migration": {},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "scheme",
"ANDROID_SCHEME": " ",
"ANDROID_HOST": " ",
"ANDROID_PATHPREFIX": "/"
},
"cordova-plugin-device": {},
"cordova-plugin-inappbrowser": {},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27. "
},
"cordova-plugin-network-information": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-whitelist": {},
"cordova-support-google-services": {},
"cordova.plugins.diagnostic": {},
"phonegap-plugin-barcodescanner": {
"CAMERA_USAGE_DESCRIPTION": "Used for osmething",
"ANDROID_SUPPORT_V4_VERSION": "27. "
},
"phonegap-plugin-multidex": {},
"phonegap-plugin-push": {
"SENDER_ID": "id",
"ANDROID_SUPPORT_V13_VERSION": "27. ",
"FCM_VERSION": "16.0. "
},
"im.ltdev.cordova.UserAgent": {}
}
}
}
運行批處理后的預期結果是:
{
"scripts"{ still the same scripts},
"dependencies"{ still the same dependencies},
"cordova": {
"platforms": [],
"plugins": {}
}
}
}
我嘗試使用來自 @Stephan 的代碼,如下所示:
@echo OFF
::removePlugins
setlocal enabledelayedexpansion
SET @findPlugins=0
find /i /c "plugins" ./package.json >NUL
if not errorlevel 1 (SET @findPlugins=1)
IF !@findPlugins!==1 (
SET "@FOUND=1"
>tempPackage.json (
for /F "delims=" %%G in (./package.json) do (
echo %%G|findstr /b "}" >nul && SET "@FOUND=1"
if defined @FOUND ECHO %%G
echo %%G|findstr /b "\"plugins\": {" >nul && SET "@FOUND="
)
)
type tempPackage.json
)
它只是將 json 重寫為 temp 并沒有洗掉任何內容……我做錯了什么?
uj5u.com熱心網友回復:
請記住,批處理不能解釋.json檔案并將它們作為純文本處理。因此,任何批處理解決方案都將高度依賴檔案的確切格式。格式的任何更改(一個雜散的空間可能就足夠了)可能會導致垃圾。
也就是說:使用一個標志,該標志在(每一)行開始變化,"plugins":并在擊中以}(塊的結尾)開始的行時變回,并根據標志寫入行:
@echo OFF
::removePlugins
setlocal
SET "@FLAG=1"
>tempPackage.json (
for /F "delims=" %%G in (./package.json) do (
echo %%G|findstr /e "[^{]}" >nul && SET "@FLAG=1"
if defined @FLAG ECHO %%G
echo %%G|findstr "\"plugins\":" >nul && SET "@FLAG="
)
)
type tempPackage.json
uj5u.com熱心網友回復:
這使用正則運算式來捕獲“插件”行之前的所有內容。
powershell -NoLogo -NoProfile -Command ^
Get-Content -Raw .\pi.txt ^| ^
ForEach-Object { if ($_ -match '(?sm)(.*\"plugins\": {).*') { $Matches[1] \"`n`n}\" ^| Out-File -FilePath '.package.json'}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451799.html
