Page 1 sur 1

Récupérer la 1ere ligne d'un fichier texte et l'utiliser comme variable dans un batch

Posté : 20 févr. 2020 18:13
par El_Barto
Bonjour à tous,
Actuellement en pleine confection d'un batch, je cherche une commande pour
recuperer la seconde ligne d'un fichier texte (qui contient uniquement le numero
de serie d'un pc) afin de men servir pour nommer un fichier texte; j'arrive a réaliser
cela depuis des commandes powershell, en script ps1, mais je ne trouve pas
d'équivalence opérationnelle pour les batch...
J'ai bien trouvé des scripts comme celui-ci:

@echo off
set currentpath=%~dp0
wmic csproduct get identifyingnumber>>%currentpath%\Data\Temp\SN.txt
set "file=%currentpath%\Data\Temp\SN.txt"
call :GetLine "%file%" 2
set ma_ligne=%Line%
echo;%ma_ligne%
:GetLine <file> <Nb>
if "%~1"=="" pause>nul&exit
set "tmpFile=%~1"
set /a nb=%~2
set /a nbSkip=%nb%-1
( echo;for /f "skip=%nbSkip% tokens=*" %%%%l in ^('type "%tmpFile%"'^) do set "line=%%%%l"^&goto :GetLineok&echo;:GetLineok )> "%temp%\tmp_%~nx0"
call "%temp%\tmp_%~nx0"&del /q "%temp%\tmp_%~nx0"
set "line_%nb%=%line%"
cd C:\Windows\system32
hostname>>%currentpath%\Rapport\%ma_ligne%.txt

La commande "echo;%ma_ligne%" m'affiche bien l'élément mais le fichier texte prend pour
nom ".txt"...de plus si je choisis de récupérer la 1ere ligne (en remplaçant 2 par 1 à la
4ème ligne du script), d'un autre fichier dont j'ai besoin, le message "tokens=*" est inattendu"
et j'avoue ne pas comprendre pourquoi...
Mon but etant de stocker des infos dans un fichier texte qui aurait pour nom le numéro de série
de l'appareil, et pouvoir faire la même avec le nom d'hôte, ce que j'ai pu faire en ps1.
Merci à ceux qui pourrait m'apporter leur aide.

Re: Récupérer la 1ere ligne d'un fichier texte et l'utiliser comme variable dans un batch

Posté : 21 févr. 2020 04:20
par barbe_bleue
Salut, p'tit bricolage qui fonctionne mais un peu crade puisque le fichier source est parcouru en intégralité…

Code : Tout sélectionner

@echo off
setlocal enabledelayedexpansion

set src=test.txt
set ligneArecuperer=2

for /f "tokens=*" %%a in (%src%) do (
set /a a+=1
if !a!==%ligneArecuperer% (
set ligne=%%a
)
)
echo %ligne%
pause
exit