วิธีค้นหาและแทนที่สตริงในไฟล์ html หลายไฟล์ภายในไดเรกทอรีและเป็นไดเรกทอรีย่อยด้วย Windows CMD


0

ข้อกำหนดนี้คล้ายกับวิธีค้นหาและแทนที่สตริงในไฟล์ข้อความหลายไฟล์ (ภายในไดเรกทอรี) ด้วย Windows CMD? ส่วนที่ 2

ฉันต้องการค้นหาและแทนที่ในไฟล์ HTML ทั้งหมดภายในโฟลเดอร์และเป็นโฟลเดอร์ย่อย

ที่นี่ฉันกำลังรับ 2 ปัจจัยการผลิตจาก 1 ซึ่งเป็นเส้นทางไฟล์และอีกอย่างคือชื่อโฟลเดอร์ในเส้นทางไฟล์ด้วยเหตุผลบางอย่าง

set /p INPUT1= Enter Source file path:
set /p INPUT2= Enter Source folder name (**Without any Space**): 

Here let's assume (below folders can change):
INPUT1= D:\!Test\
INPUT2= Folder1

Then path is D:\!Test\Folder1\
Inside Folder1 there are some more folders like:
....Folder1\A\Common\
....Folder1\B\Common\
....Folder1\C\Common\

In above folder **A** as well as folder **Common** have html files.

I have coded this in .cmd file as below:

set /p INPUT1= Enter Source file path: 
set /p INPUT2= Enter Source folder name (**Without any Space**): 

REM แทนที่ข้อความ FindTextX.html กับ ReplaceTextA.html ในโฟลเดอร์, ReplaceTextB.html ในโฟลเดอร์B , ReplaceTextC.html ในโฟลเดอร์C ตั้งค่า "OldStringA = FindTextX.html" ตั้งค่า "NewStringA = ReplaceTextA.html" ตั้งค่า "NewStringB = ReplaceTextB.html" ตั้งค่า "NewStringC = ReplaceTextC.html"

@ECHO OFF &SETLOCAL
cd %INPUT1%\%INPUT2%\A\
for %%x in (*.html) do call:process "%%~x"
goto:eof
:process 
set "outFile=%~n1%~x1"  
(for /f "skip=2 delims=" %%a in ('find /n /v "" "%~1"') do (  
    set "ln=%%a"  
    Setlocal enableDelayedExpansion  
    set "ln=!ln:*]=!"  
    if defined ln (
        set "ln=!ln:%OldStringA%=%NewStringA%!"
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
REM exit /b
REM Come out of A folder
cd..
REM Go inside of B folder
cd B
for %%x in (*.html) do call:process1 "%%~x"
goto:eof
:process1
set "outFile=%~n1%~x1"  
(for /f "skip=2 delims=" %%a in ('find /n /v "" "%~1"') do (  
    set "ln=%%a"  
    Setlocal enableDelayedExpansion  
    set "ln=!ln:*]=!"  
    if defined ln (
        set "ln=!ln:%OldStringB%=%NewStringB%!"  
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
.......So on for folder **C** .....
exit /b

อย่างไรก็ตามสิ่งนี้ไม่ทำงาน ฉันได้รับไฟล์ html ว่างภายในโฟลเดอร์, BและC อย่างไรก็ตามมันไม่สามารถใช้งานได้กับโฟลเดอร์ย่อยทั่วไปซึ่งอยู่ในโฟลเดอร์A, B และ C แต่ละโฟลเดอร์ ฉันต้องการสคริปต์นี้เพื่อแทนที่ข้อความในไฟล์ HTML ภายใต้โฟลเดอร์, BและCเช่นเดียวกับข้อความของพวกเขาภายในโฟลเดอร์ย่อย หมายเหตุ: ฉันไม่ต้องการไฟล์ BAT เพิ่มเติมเช่น FART, REPLACER, .... ฯลฯ ความช่วยเหลือของคุณได้รับการชื่นชม


2
คุณมีเหตุผลบางอย่างที่ต้องทำใน CMD หรือไม่? คุณดู Notepad ++ แล้วหรือยัง
เจมี่ Hanrahan

เรามี Linux หรือ Unix ด้วยbashหรือไม่ หรือCygwinสามารถใช้ได้? ทุกสิ่งจะง่ายขึ้นถ้ามี
iBug

ใช่มีเหตุผลบางอย่างที่จะทำเช่นนี้ใน CMD ฉันต้องการสิ่งนี้สำหรับเครื่อง Windows
Maxim

1
"อย่างไรก็ตามสิ่งนี้ไม่ได้ผล" นั่นไม่ใช่คำอธิบายที่ดีมากเกี่ยวกับสิ่งที่ผิด ข้อความแสดงข้อผิดพลาดคืออะไร แบตช์อะไรที่ไม่ควรทำ เกิดอะไรขึ้นในไฟล์แบตช์
DavidPostill

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.