Aide par fichier de lot (pour instruction)

1

J'ai besoin d'aide pour cette déclaration au moment où elle est exécutée dans un fichier de commandes, toutes les lignes d'un fichier texte seront lancées, par exemple

fichier1.txt:

notepad
wordpad

alors il va lancer:

start notepad
start wordpad

Bien que j'aimerais pouvoir spécifier quelle ligne il va exécuter, au lieu de tous les exécuter (ce qu'il est en train de faire)

pour /f "delims=|" %%i in (file1.txt) do @start "x" %%i

Peter Manton
la source
Ce n'est pas très clair. Voulez-vous une méthode interactive pour choisir quelle ligne du fichier batch doit être exécutée?
Phuzion
@phuzion Mes excuses, oui, il faut que ce soit interactif
Peter Manton,
Pouvez-vous expliquer pourquoi vous voulez faire cela? Le cas d'utilisation va affecter la façon de s'y prendre pour résoudre ce problème. Mon problème principal avec ceci est que vous semblez demander un fichier de commandes qui analysera un fichier et fournira à l'utilisateur des programmes à exécuter. Un fichier de commandes est probablement le pire outil pour cette tâche. Êtes-vous dans un environnement restreint qui vous oblige à utiliser cette technologie?
Doltknuckle
Bonjour, oui, je suis dans un environnement restreint, comme vous pouvez l’imaginer, ce n’est pas la chose la plus facile à faire avec des lots, ce qui est assez frustrant. Mais je suis allé et utilisé une autre façon de le faire maintenant, donc cette question peut être fermée si nécessaire.
Peter Manton

Réponses:

1

Je ne sais pas ce que vous voulez (ni quel est le problème), mais vous devez utiliser le /wcommutateur de la startcommande:

for /f "delims=|" %%i in (file1.txt) do @start /w "x" %%i
Synetech
la source
Bonjour, je veux dire, si je spécifie le numéro de ligne 2 du fichier texte (wordpad), Wordpad sera lancé. (Rien d'autre)
Peter Manton
1

Voici un fichier de commandes qui vous permettra de choisir entre les deux options:

echo off
title Notepad or Wordpad
setlocal
set OK=N

:again
set /p choice=Please enter:    1 [Notepad],    2 [Wordpad]
if [%choice%]==[] goto again
if [%choice%]==[1] goto 1
if [%choice%]==[1] goto 2
set /p xxx=wrong entry, press any key to return.
endlocal
goto end


1: start notepad

2: start wordpad

:end
@echo on
cls
Amartel
la source
Bonjour, désolé, mais le problème, c'est que j'appelle les lignes à partir d'un fichier texte. Elles sont variables
Peter Manton,
Ahh je vois. Désolé, j'ai mal interprété votre question :-)
Amartel,
1

Copiez simplement le fichier .txt dans new_batch_file.bat, puis utilisez la commande suivante pour l'appeler:

  • CALL new_batch_file.bat
Randolf Richardson
la source
0

Que dis-tu de ça?

dir.menu

# Comments and empty lines are ignored

# Lines starting with a hyphen '-' indicate a group
- Editors
1 Notepad.exe
2 WordPad.exe

# You can use numbers or letters, and even words (without spaces)
- Graphics
P mspaint.exe

menu.bat

@setlocal
@echo off

if not exist ".\dir.menu" echo There is no "dir.menu" file in the current directory. & goto :end

set arg=%~1

if not defined arg goto :show_menu

for /f "tokens=1,* delims= " %%i in (dir.menu) do (
    if not "%%i"=="#" if /i "%arg%"=="%%i" (
        start "x" "%%j"
    )
)

:end
    endlocal
    exit /B

:show_menu
    echo   Menu:
    echo ===================
    for /f "tokens=1,* delims= " %%i in (dir.menu) do (
        if not "%%i"=="#" (
            if "%%i"=="-" (
                echo   %%j
            ) else (
                echo    %%i] %%j
            )
        )
    )
    goto :end

C'est un système de menu simple mais agréable. Vous pouvez utiliser des chiffres ou des lettres (ou un mot, sans espaces) comme clé. Je l'ai gardé très simple pour que vous puissiez voir comment interagir avec cela. (Par exemple, vous pouvez créer un ensemble de répertoires en tant que système de menus complet, les éléments de menu étant tous contenus dans des fichiers 'dir.menu'.)

Exemple d'utilisation:

>menu
  Menu:             
=================== 
  Editors           
   1] Notepad.exe   
   2] WordPad.exe   
  Graphics          
   P] mspaint.exe   

>menu p
[mspaint is launched]
>

MISE À JOUR : testé et corrigé plusieurs choses à partir de mon ordinateur, au lieu de mon téléphone.

Kody Brown
la source