Come cercare e sostituire una stringa in più file html all'interno di una directory e delle sue sottodirectory con Windows CMD?


0

Questo requisito è simile a Come cercare e sostituire una stringa in più file di testo (all'interno di una directory) con Windows CMD? Parte 2

Voglio eseguire Trova e sostituisci su tutti i file HTML all'interno di una cartella e delle sue sottocartelle.

Qui sto prendendo 2 input da 1 dei quali è il percorso del file e un altro è il nome della cartella in quel percorso del file per qualche motivo.

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 Sostituire il testo FindTextX.html con ReplaceTextA.html nella cartella A , ReplaceTextB.html nella cartella B , ReplaceTextC.html nella cartella C .
Set "OldStringA = FindTextX.html" Set "NewStringA = ReplaceTextA.html" Set "NewStringB = ReplaceTextB.html" Set "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

Tuttavia questo non funziona. Ottengo file html vuoto all'interno della cartella A , B & C . Tuttavia, non funziona con la sottocartella Common che si trova all'interno di ciascuna cartella A, B e C. Voglio che questo script sostituisca il testo nei file HTML nelle cartelle A , B e C , nonché il testo all'interno delle loro sottocartelle . Nota: non desidero file BAT aggiuntivi come FART, REPLACER, ecc. Il tuo aiuto è apprezzato.


2
Hai qualche motivo per farlo in CMD? Hai visto Notepad ++?
Jamie Hanrahan,

Abbiamo Linux o Unix con bash? O è disponibile Cygwin ? Le cose saranno più facili se è così.
iBug

Sì, c'è qualche motivo per farlo in CMD. Ho bisogno di questo per la macchina Windows.
Massimo

1
"Tuttavia questo non funziona" Questa non è una descrizione molto buona di ciò che è sbagliato. Quali sono i messaggi di errore? Cosa non sta facendo il batch che dovrebbe. Dove nel file batch sta andando storto?
DavidPostill

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.