Comment rechercher et remplacer une chaîne dans plusieurs fichiers texte (dans un répertoire) avec Windows CMD? Partie 2

C'est en relation avec cette question .

Malheureusement, les scripts PowerShell sont désactivés sur le système sur lequel je travaille. Je ne peux même pas utiliser un simple (Get-Content) .

J'ai compris comment changer des chaînes spécifiques dans un fichier PS spécifique (grâce aux réponses). Cependant, je ne peux le faire que sur un fichier PS à la fois, et je devais modifier le fichier batch lui-même en spécifiant le nom du fichier PS (son code dur). Tout ce qui reste est que le fichier batch traite tous les fichiers PS dans le même répertoire (pas de sous-répertoire).

Voici le code:


 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 

Fondamentalement, je souhaite simplement que ce code traite tous les fichiers PS dans le même répertoire. Aidez-nous. Et merci d'avance!

Non testé

 @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 

Enfin, après plus de 2 semaines, ce code fonctionne enfin! Crédits à 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 

Sur la dernière partie (conversion en photo). Merci beaucoup à @Endoro (mwahugs!).

Juste pour le compte rendu, un code de ligne dans linux

Find / home / usuario / micarpeta / -name * .txt -exec sed -i "s / OldStringx / NewStringx / g" {} \