0
votes

Rechercher la taille actuelle de la console dans le lot

Je travaille sur un fichier batch et je dois imprimer des traits d'union (-) sur l'écran comme séparateur. Existe-t-il une commande rapide (moins de deux secondes) qui peut faire cela?

J'ai effectué plusieurs requêtes de recherche et je n'ai pas trouvé de réponse sur divers sites Web.

(code to find screen size) 
for /l %%a in (1,1,%screen size var%) do (set "line=%line%-")
echo %line%

Le résultat doit afficher une ligne de tirets sur la console.


1 commentaires

3 Réponses :


1
votes

Si vous pouvez travailler sur les commandes par lots pour récupérer la valeur des colonnes , vous pouvez utiliser la sortie de la commande MODE;

C:\Users\gjp>mode con

Status for device CON:  
----------------------  
    Lines:          9001  
    Columns:        120  
    Keyboard rate:  31  
    Keyboard delay: 1  
    Code page:      850  
    MODE CON  


2 commentaires

Merci, mais je cherchais à pouvoir enregistrer la sortie dans une variable et créer une ligne à l'écran


@FrederickReynolds, jetez un œil à ce fil ...



1
votes

Ceci n'a pas été testé, mais basé sur la sortie du Mode CON tel qu'utilisé dans gjpio Réponse de:

@Echo Off
For /F %%A In ('Powershell -NoP "Write-Host('-' * $(Get-Host).UI.RawUI.WindowSize.Width)"')Do Set "separator=%%A"
Echo Welcome to %~nx0
Echo %separator%
Pause

Si vous avez l'intention d'utiliser le séparateur plusieurs fois dans votre script, vous pouvez l'enregistrer dans une variable:

@Echo Off&SetLocal EnableDelayedExpansion&Set "separator="
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do Set "separator=!separator!-")&GoTo :Next
:Next
Rem Uncomment the next line if you don't want to use delayed expansion in the rest of the script
::EndLocal&Set "separator=%separator%"
Rem Your code goes here
Echo Welcome to %~nx0
Echo %separator%
Pause

En guise de dernière réflexion après coup, et juste au cas où vous estimeriez que cela fonctionnerait plus rapidement, j'ai pensé que je ferais mieux de fournir une version utilisant l'expansion retardée également:

@Echo Off
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do (Call Set "separator=%%separator%%-"))&GoTo :Next
:Next
Echo Welcome to %~nx0
Echo %separator%
Pause

En complément de tout ce qui précède, vous pouvez également utiliser pour faites ceci aussi:

@Echo Off
For /F "Skip=4Tokens=1*Delims=:" %%A In ('Mode CON')Do (For /L %%C In (1,1,%%B)Do @Set/P "=-"<Nul)&Echo( &GoTo :Draw
:Draw
Pause


0 commentaires

-1
votes

Je vous suggère d'utiliser le code suivant:

@echo off
setlocal EnableDelayedExpansion

for /F "skip=4 tokens=2" %%A IN ('mode CON') do (
    for /L %%B IN (1 1 %%A) do set "hyphen=!hyphen!-"
    echo !hyphen!
    goto :subroutine
)

:subroutine
echo You may continue here
pause

ce qui est un peu compliqué, mais devrait faire ce que vous voulez.

Le code recherche les colonnes dans la sortie de commande de mode CON et les ajoute à la variable tiret en conséquence.


8 commentaires

En quoi votre réponse est-elle «vraiment» différente de ma version d'extension retardée?


@Compo sauf qu'il est développé, avez-vous vu les conditions for / F ? Ils diffèrent, je pense, de votre réponse, n'est-ce pas?


Le mien a été écrit et accepté avant même que le vôtre ne soit publié. Dans des cas comme celui-ci, un membre responsable aurait suggéré d'apporter des améliorations mineures à la réponse existante, s'il avait été convenu qu'il s'agissait d'une amélioration. Je pourrais affirmer que le mien est meilleur et vous pouvez soutenir que le vôtre est plus facile à regarder, mais, à part que vous avez utilisé un délimiteur différent, ils sont essentiellement la même réponse, et il était inutile que vous l'affichais.


@Compo ce n'est pas une amélioration mineure, vous savez que dans une conversation dans le passé, vous avez continuellement soutenu pour une raison étrange, je ne pouvais même pas comprendre que les espaces ne devraient pas être utilisés car ils ne sont pas nécessaires. Imaginez-vous comme une personne qui vient de commencer à coder. Vous trouverez la mienne utile et organisée ou la vôtre réponse? En outre, quelle réponse est préférable de déboguer? Et finalement, vous n'avez probablement pas écrit le one-liner immédiatement, vous l'avez juste écrit ligne par ligne et vous l'avez converti, ensuite. C'est pourquoi je pense que nos réponses diffèrent.


De plus, j'aimerais rester dans cette excellente réponse d'Aacini: À mon avis, dans les réponses aux sujets Batch, nous devons soyez très concis et clair, en particulier avec les débutants, et fournissez les informations minimales qui aident à résoudre le problème, mais ne pas submerger et rendre les réponses confuses. À la fin, si vous pensez nos réponses sont les mêmes, lève un mod-flag plutôt que de créer une conversation entière avec moi. Notez cependant que je refuserais personnellement le drapeau.


Juste pour continuer votre argument inutile, j'ai utilisé le délimiteur : car, quelle que soit la ligne de la sortie Mode CON , seul le Skip < / code> aurait dû être ajusté, dans le vôtre, un modificateur aurait besoin d'ajuster à la fois le Skip et le nombre de Tokens . Mon exemple montre comment ajuster le code, afin de désactiver à nouveau l'expansion retardée, sans affecter le code des utilisateurs en dessous, le vôtre ne le fait pas. La mienne garantit qu'aucune variable prédéfinie n'affecte la ligne de tirets, la vôtre ne le fait pas, et par souci d'exhaustivité, j'ai inclus 2 autres exemples!


@Compo donc ... après tout, votre premier commentaire n'a plus de sens puisque vous avez ajouté un commentaire complet pour expliquer en quoi nos réponses diffèrent ! Je trouve cela inutile et je ne comprends vraiment pas pourquoi vous l'avez ajouté. Deuxièmement, vous n'avez pas répondu à mes questions: si vous veniez de commencer à coder, quelle réponse préféreriez-vous? Cela dit, je n'aime pas rendre la vie des autres difficile et j'essaie de leur expliquer le code, afin qu'ils puissent le comprendre et le modifier à leur guise et j'espère qu'ils ne reviendront pas avec une mauvaise conduite, vous ne le faites pas. Vous compliquez les choses et je ne sais pas le pourquoi .


Enfin, comme vous pensez que mon argument est inutile, donc nos réponses ne diffèrent pas => la mienne est le plagiat, alors veuillez lever un mod-flag personnalisé, afin que les modérateurs puissent l'examiner et dire si c'est ou non comme je l'ai mentionné ci-dessus.