Как выполнить поиск и замену строки в нескольких текстовых файлах (в пределах каталога) с помощью Windows CMD? Часть 2

Как выполнить поиск и замену строки в нескольких текстовых файлах (в пределах каталога) с помощью Windows CMD? Часть 2

Это касаетсяэтот вопрос.

К сожалению, скрипты PowerShell отключены в системе, над которой я работаю. Я даже не могу использовать простой (Get-Content).

Я разобрался, как изменить определенные строки в определенном файле PS (спасибо за ответы). Однако я могу сделать это только с одним файлом PS за раз, и мне пришлось редактировать сам пакетный файл, указав имя файла PS (оно жестко закодировано). Все, что осталось, это чтобы пакетный файл обработал ВСЕ файлы PS в одном каталоге (без подкаталогов).

Вот код:


REM Start of Code  
REM Auto-process PS files within a directory  
REM Changes how PS files look when displayed   
REM This batch file searches for instances of   
REM "OldStringx" within the file and replaces it   
REM with "NewStringx"   

REM Thicken line width from 1 to 5  
Set "OldString1=1 setlinewidth"  
Set "NewString1=5 setlinewidth"  

REM Change Courier font to Helvetica  
Set "OldString2=Courier"  
Set "NewString2=Helvetica-Bold"  

REM To do: This batch file should process all PS files within  
REM the same directory where the batch file is located  
REM (Batch file and all PS files to be edited should be  
REM found on the same path).  

REM Specified below is the PS file to edit. Hard-coded for now.    
set file="psfile_to_edit.ps"  

@echo off  
cd /d .  
for /F "usebackq delims=" %%F in (`dir *.ps /b`) do set outFile="%%~nF_edited%%~xF"  
(  
    for /f "skip=2 delims=" %%a in ('find /n /v "" %file%') do (  
        set "ln=%%a"  
        Setlocal enableDelayedExpansion  
        set "ln=!ln:*]=!"  
        if defined ln set "ln=!ln:%OldString1%=%NewString1%!"  
        if defined ln set "ln=!ln:%OldString2%=%NewString2%!"  
        echo(!ln!  
        endlocal  
    )  
)>%outFile%  

REM Convert edited PS files to JPG  
REM This requires convert.exe to work  
REM Currently commented out to debug above parts.  
REM convert.exe %outFile% -autocrop %outfile:~0,-4%.jpg  
REM End of Code

По сути, я просто хочу, чтобы этот код обрабатывал все файлы PS в одном каталоге. Пожалуйста, помогите. И спасибо заранее!

решение1

непроверенный

@ECHO OFF &SETLOCAL
cd /d . 

for %%x in (*.ps) do call:process "%%~x"
goto:eof

:process 
set "outFile=%~n1_edited%~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:%OldString1%=%NewString1%!"  
        set "ln=!ln:%OldString2%=%NewString2%!"
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
exit /b

решение2

Наконец-то, спустя более 2 недель, этот код наконец-то работает! Спасибо Endoro.

REM Start of Code  
REM Auto-process PS files within a directory  
REM Changes how PS files look when displayed   
REM This batch file searches for instances of   
REM "OldStringx" within the file and replaces it   
REM with "NewStringx"   

REM Thicken line width from 1 to 5  
Set "OldString1=1 setlinewidth"  
Set "NewString1=5 setlinewidth"  

REM Change Courier font to Helvetica  
Set "OldString2=Courier"  
Set "NewString2=Helvetica-Bold"  

@ECHO OFF &SETLOCAL
cd /d . 
for %%x in (*.ps) do call:process "%%~x"
goto:eof

:process 
set "outFile=%~n1_edited%~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:%OldString1%=%NewString1%!"  
        set "ln=!ln:%OldString2%=%NewString2%!"
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
exit /b

REM Convert edited PS files to JPG  
REM This requires convert.exe to work  
REM Currently commented out to debug above parts.  
REM convert.exe %outFile% -autocrop %outfile:~0,-4%.jpg  
REM End of Code

Перейдем к последней части (преобразование в картинку). Еще раз большое спасибо @Endoro (mwahugs!).

решение3

Для справки, одна строка кода в Linux

найти /home/usuario/micarpeta/ -name *.txt -exec sed -i "s/OldStringx/NewStringx/g" {} \

Связанный контент