2 votes

options for [for /f "usebackq" %%f in (`find "" path`) do] sentence in batch

J'ai simplifié mon problème :

@echo off
set res=

for /f "usebackq" %%f in (`find "a" list.txt`) do set res=%%f
echo %res%

pause>nul
and that things.txt file in the code is like:

Le fichier list.txt dans le code est :

apple
pitch
pear
melon
mango

Comme vous vous y attendez, le résultat de ce code est

mango

parce que la ligne "mangue" est située en dessous de la ligne "pomme" et "poire".

Mais le résultat que je veux est

apple

ou

pear

Plus précisément, je veux mettre chacune des autres valeurs ci-dessus mango comme apple y pear dans la variable res en utilisant les touches d'option fournies.

Y a-t-il un moyen de le faire ?

2voto

programmer365 Points 1

Ici, seule la dernière correspondance est sélectionnée car res est écrasé à chaque fois. Cela permet de sauvegarder toutes les correspondances en les délimitant par un espace :

@echo off & setlocal enabledelayedexpansion & set "fruits=" 
for /f ^tokens^=^* %%a in ('type list.txt ^| find "a"') do set "fruits=!fruits! %%a"
set "fruits=!fruits:~1!

Maintenant echo !fruits! donnera apple pear mango .

Si vous voulez obtenir les deux premiers matches, utilisez ceci :

for /f "tokens=1,2 delims= " %%a in ("!fruits!") do echo %%a %%b

donnera apple pear et pour le sauvegarder dans l'utilisation des fruits do set "fruits=%%a %%b" . Vous pouvez modifier tokens pour sélectionner les mots délimités par un espace.

1voto

iTwasnTme Points 5586
@Echo off

<con: CD /d "%~dp0" && Setlocal EnableDelayedExpansion
for /f %%i in (list.txt)do echo\%%i|find "a" >nul && (
   set /a "_cnt+=1+0" && call set "_res_!_cnt!=%%~i" )

for /l %%L in (1 1 !_cnt!)do echo\_res_%%L==!_res_%%L!
endlocal
  • Sortie :

    _res_1==apple _res_2==pear _res_3==mango

Vous pouvez utiliser un for /f et une echo\"a"|find "a" si "a", est trouvé, l'opérateur && se poursuivra, et un compteur sera utilisé pour définir une variable_counter_actual=current_occurrence de sorte que vous puissiez utiliser tout ce qui se produit entre le premier et le dernier.

Pour l'exemple d'utilisation, vous avez la sortie de la commande for /l boucle, qui listera toutes les occurrences en commençant par 1, en suivant de 1 en 1 jusqu'au total (!_cnt !), chaque !_res_%%L! .

  • Pour les deux premières occurrences seulement :

    for /l %%L in (1 1 2)do echo_res_%%L==!res%%L!

  • N'utilisez que les occurrences souhaitées, par exemple 1ère et 3ème :

    for %%L in (1,3)do echo_res_%%L==!res%%L!

  • Ou, tout simplement, utiliser :

    echo!_res_1! echo!_res_2!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X