La solution est simple :
@echo off
if exist "file.txt" %SystemRoot%\System32\findstr.exe /R "^." "file.txt" >"file.tmp"
if exist "file.tmp" for %%I in ("file.tmp") do if %%~zI == 0 (del "file.tmp") else move /Y "file.tmp" "file.txt"
FINDSTR exécute une expression régulière pour trouver les lignes qui ont au moins un caractère au début de la ligne et ainsi de suite. FINDSTR sort toutes les lignes qui ne sont pas vides. La sortie par FINDSTR est redirigé vers un fichier temporaire file.tmp
.
Le fichier temporaire créé remplace le fichier d'entrée s'il est créé (le fichier d'entrée existe) et n'est pas vide, ce qui signifie qu'au moins une ligne non vide a été trouvée dans le fichier d'entrée. Le fichier temporaire est supprimé lors de sa création, mais il est vide.
Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez un fichier invite de commande exécutez-y les commandes suivantes, et lisez entièrement toutes les pages d'aide affichées pour chaque commande très attentivement.
del /?
echo /?
findstr /?
for /?
if /?
move /?
Voir également la documentation de Microsoft sur Utilisation des opérateurs de redirection des commandes pour une explication de l'opérateur de redirection >
.