Ce script de lot DOS désactive les lignes vides et ne montre pas les lignes vides dans le fichier, même si j'utilise la commande Type.exe pour convertir le fichier pour vous assurer que le fichier est ASCII afin que la commande de recherche soit compatible. avec le fichier. Quelqu'un peut-il me dire comment faire ce script inclut des lignes vides?
@ECHO off FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE.exe "build.properties" ^| FIND.exe /V ""`) DO ( ECHO --%%A-- ) pause
5 Réponses :
C'est le comportement conçu pour / f - il ne renvoie jamais de lignes vides. Le travail autour est d'utiliser Rechercher ou Rechercher pour préfixer la ligne avec le numéro de ligne. Si vous ne pouvez garantir aucune ligne de départ avec le délimiteur de numéro de ligne, vous définissez simplement le délimiteur approprié et gardez les jetons 1 * mais utilisez uniquement le 2e jeton.
setlocal enableDelayedExpansion type "file.txt">"file.txt.tmp" for /f %%N in ('find /c /v "" ^<"file.txt.tmp"') do set cnt=%%N <"file.txt.tmp" ( for /l %%N in (1 1 %cnt%) do( set "ln=" set /p "ln=" echo(!ln! ) ) del "file.txt.tmp"
Pas de problème là-bas, mais je suis d'accord que ça a l'air mauvais. C'est une option plus fiable que echo. Code>. Il existe des situations obscures où
écho. Code> peut échouer, alors que
echo ( code> ne manque jamais. Le point de la syntaxe permet de permettre la sortie d'une ligne vide.
Pouvez-vous expliquer la ligne "echo (! Ln!"? N'y a-t-il pas un problème avec une parenthèse de fermeture? De plus, la ligne ci-dessus manque la fermeture! Char?
Enfin, ça marche. Vos connaissances dans ce domaine sont géniales. Merci.
@ Didzis / Tom / Xlant - sauf si vous savez pourquoi Je vois des résultats qui suggèrent que la déclaration de cet utilisateur "{dans toutes les versions de Windows} sauter des lignes vierges est une fonctionnalité conçue "est incorrecte , je ne suis pas sûr de savoir pourquoi mon édition suggérée de corriger cela a été rejetée ??
@dbenham, y a-t-il une raison pour laquelle vous devez utiliser la commande code> type code>, puis tuez-la dans la commande trouver code>? Pourquoi ne pas réduire de moitié l'accès au fichier et il suffit d'utiliser
pour code> 's code>' skip code> la commande avec la commande
trouver code> comme suit:
pour / f "jetons = 1 * Skip = 2 Delims =] "%% x in ('Rechercher x.txt / n / v" "") do @if "% y" == "" (echo %%) code> de cette façon, les données sont uniquement lues à partir du disque une fois.
@Jamesk - J'utilise le type pour vous assurer que le contenu est ASCII. Relisez la question de l'OP puis lisez le 4ème paragraphe de ma réponse (ignorant le code). Je m'adresse à vos préoccupations.
Modifier - Réponse corrigée à Adresse FindStr avec une entrée redirigée ou canalisée déposant de longues lignes et a ajouté une variante qui conserve de longues lignes.
Y a-t-il une solution de contournement si les lignes sont plus longues à 1021 octets?
@Jcarlos - Non, la technique SET / P a une limite d'octets de 1021 durs.
Merci à DBENHAM, cela fonctionne, bien qu'il soit légèrement différent de sa suggestion:
::preserve blank lines using FIND, no limitations for /f "USEBACKQ delims=" %%A in (`type "file.properties" ^| find /V /N ""`) do ( set "ln=%%A" setlocal enableDelayedExpansion set "ln=!ln:*]=!" echo(!ln! endlocal )
Qu'est-ce qui ne fonctionne pas? Que vois-tu? Je vois un problème. echo! ln! code> imprimera
echo est désactivé code> si la ligne est vide! C'est pourquoi j'ai utilisé
echo (! Ln! Code>
Ok, je l'ai mis à jour. Ça fonctionne maintenant. Merci beaucoup! Maintenant, j'ai juste besoin d'intégrer cela dans mon projet.
J'ai écrit un programme très simple qui peut servir de remplacement de edit strong>: addendum en tant que réponse au nouveau commentaire em> p> Créer un programme de 88 octets appelé pipe.com, qui essentiellement un processus équivalent à ce code pseudo-batch: p> de cette façon, des lignes vides dans le fichier d'entrée sont modifiées par Des lignes avec un espace, donc la commande / f net plus omettez-leur. Cela fonctionne "tant que l'espace inséré ne se soucie pas" Comme je l'ai dit dans ma réponse. P> Notez que le programme Pipe.com ne fonctionne pas dans les versions de 64 bits Windows. P> < p> antonio p> p> Rechercher code> et
Commandes FindStr code> lorsqu'ils sont utilisés à cette fin. Mon programme s'appelle
pipe.com code> et il suffit d'insérer un espace vide dans des lignes vides. Toutes les lignes peuvent donc être traitées directement par
pour la commande code> sans ajustements supplémentaires (aussi longtemps comme l'espace inséré ne se soucie pas). Ici, il est:
Merci pour l'aide aussi de DOS TIPS
Excuse-moi. Pourriez-vous confirmer si mon programme de pipe.com a résolu votre problème?
@Aacini - Pourriez-vous décrire comment cette solution fonctionne plus en détail?
@Aacini - merci. Bien que je ne suive pas tout cela (je crois que je réalise maintenant que % tuyau% code> contient le code compilé d'un programme exécutable, cependant). Si cela ne vous dérange pas, pourriez-vous expliquer: ce que le C est dans
set / pc char = code> et comment ¿Cette ligne ne prend qu'un seul caractère?; où le contenu de
% nouvelle ligne% code> est défini; que le
echo code> ne jointe pas au caractère / espace et à une nouvelle ligne de fin sur
% ligne% code>; Et enfin, quelle variable est ce que tous les caractères individuels sont joints à un par un à un second ¿secondes? itération. En outre, une version 64 bits ne peut-elle pas être créée?
@ user66001: Comme je l'ai dit dans ma réponse, c'est un code pseudo-batch, pas b> code réel. C'est juste un moyen de vous expliquer ce que pipe.com est à la place de: "Lisez le caractère suivant, si ce n'est pas NL Ajoutez à la ligne actuelle, sinon montrer la ligne actuelle, mais s'il est vide, insérez un espace». Ce processus ne peut pas être réalisé par un fichier de commandes précisément parce que les détails que vous mentionnez. Le programme d'origine.ASM a été écrit en langage de montage.
@Aacini - D'accord; Désolé; Merci.
Voici une méthode que j'ai développée pour mon propre usage. p> enregistrer le code sous forme de fichier de commandes, Showall.bat em> strong> et transmettez le fichier source en tant que paramètre de ligne de commande. P> sortie peut être redirigé ou pipi. P> for /f "tokens=1,* delims=]" %%a in ('find /n /v "" "%~1"') do echo.%%ba
Nice, mais il strace leader ] code> des caractères des lignes et
echo. Code> échouera si une ligne existe comme
\ .. \ \ \ System32 \ \. calc.exe code>
@JEB, en fait, sous Windows 7 au moins, il ne dépasse pas tous les caractères ] code>. Juste le premier, ou jusqu'à ce qu'il rencontre le
* code>.
Comme mentionné dans Cette répondez à la question ci-dessus, il ne semble pas que les lignes soient ignorées par défaut en utilisant pour / f code> In (au moins) En tant que solution de contournement, il semble que le deuxième jeton délimité par défaut ( Windows XP code> (communauté - Veuillez mettre à jour cette réponse en testant les commandes de lot ci-dessous sur votre version et service pack de
Windows code >).
de
de
de
ping code>, dans au moins
Windows XP code>, est
causant pour / f code> pour produire
Appréciez-le s'ils pouvaient mettre à jour cette réponse ou cette réponse).
%% b code> L'exemple)
retourne comme vierge code>, qui a fonctionné pour ma situation d'élimination des lignes vides à la manière d'un "parent"
si code> conditionnel sur le deuxième jeton au début du
pour / f code>, comme celui-ci: p>
de
Utilisation du code ci-dessous: P> @echo off
systeminfo | findstr /b /c:"OS Name" /c:"OS Version"
echo.&echo.
ping -n 1 google.com
echo.&echo.
for /f %%a in ('ping -n 1 google.com') do ( echo "%%a" )
echo.&echo.&echo --------------&echo.&echo.
find /?
echo.&echo.
for /f %%a in ('find /?') do ( echo "%%a" )
echo.&echo.
pause
Comme Dbenham a dit: des bandes pour / f toujours des lignes vides. Dans votre cas, il semble que XP ne dépasse pas les lignes vides, mais en réalité, vous obtenez une ligne avec seulement une seule citation entre "pinging" code> et
"Répondre" code>. Mais cela ne signifie pas que pour / f récupère une ligne vide. La ligne contient un caractère
Merci @jeb. Je suis venu sur cette page en raison du problème avec (ce que je pensais à l'époque était) des espaces supplémentaires, mais réalisez maintenant (corrigé par vous), ils ne sont que des retours de transport étant donné sur XP. Pouvez-vous aussi peut-être aussi conseiller comment on testerait-on pour le
si non "x %% a" = "" code> énoncé?
Pour supprimer cr code>, vous pouvez appeler une fonction comme
: tondeuse
CR code> est supprimé après la phase d'expansion en pourcentage. Mais pour plus de questions, vous devriez ouvrir une propre question
Votre n'utilise pas le personnage '~' correctement. Il élimine les citations sur l'extérieur des cordes pour vous. Comprendre cela pourrait être la racine de votre problème. Au lieu de "%% A", vous devez utiliser '%% ~ a'.
@djangofan n'a pas compris au début, je n'utilisais pas du tout, sans parler correctement. Cependant, après l'avoir inséré comme indiqué dans Cette capture d'écran Je dois le faire mal. Le problème est que je pense que JEB a correctement identifié ci-dessus, que pour / f code> n'ignore pas complètement les lignes vides, je suppose que c'est supprimer le
lf code>, mais pas le < Code> Cr code> sur Win XP. Je viens de l'enfermer dans des citations pour voir ce qu'il s'agit de la sortie.