Comment puis-je écrire un script BATCH qui détecte le système d'exploitation sur lequel il s'exécute? (dos ou Windows CMDline)

-1


J'écris un script qui: 1. Détecte le système d'exploitation sur lequel il s'exécute, win10 ou win8 (ces deux options seulement)
2. Trois actions Find and Replace- actions
3. démarre le programme qui lui est associé .
Ci-dessous, une tentative de script de traitement par lots CMD / DOS:

01    set %versionOS%  to ver
           REM in the above line I want to fill a variable called
           REM %versionOS% with the output of the ver commmand

02    IF  %versionOS% = "Microsoft Windows [Version 10.0.14393]"
           REM in the above line I check if variable
           REM %versionOS% equals "Microsoft Windows [Version 10.0.14393]"

03    command to close an application.
           REM in the above line I want to close an application 
           REM  c:\path\WinCmd.exe this line could be the 1st line too, yes   

04   goto Win10
05        *commmands that change wincmd.ini to one that's suited for Win8
06        (I've figured this one out already)*
07    goto ProgStart
08    :Win10
09         *commmands that change wincmd.ini to one that's suited for Win10*
10   
11    :ProgStart
12     c:\path\WinCmd.exe 

Je voudrais de l'aide avec les 3 premières lignes. Merci.

GwenKillerby
la source
1
En abordant la question sous un angle différent pour éliminer le besoin de recherche / remplacement, vous pouvez simplement créer deux versions du fichier INI, appelez-les WinCmd_8.ini et WinCmd_10.ini avec les différences appropriées. Ensuite, tout ce dont vous avez besoin est de deux fichiers BAT / CMD portant le même nom et comportant deux instructions: Copiez l’INI spécifique à la version dans WinCmd.ini (écrasez-le), puis démarrez / redémarrez WinCmd.
Mike Fitzpatrick
@ MikeFitzpatrick a un bon point. Ce qui précède simplifiera énormément le script. Cela dit, le superutilisateur n'est pas un type de service du type "écrivez-moi un script", votre question est donc considérée comme étant hors sujet ici. Si vous avez un script réel, pas dans un langage conceptuel, mais dans un langage .cmd, n'hésitez pas à nous demander pourquoi il ne fonctionne pas et nous vous aiderons.
LPChip
En développant le commentaire de @ MikeFitzpatrick, il existe de nombreuses façons de déterminer le numéro de version du système d'exploitation à partir de DOS. Voir windows-commandline.com/find-windows-os-version-from-command pour plus de détails.
Richard
2
Voter pour clore en dehors du sujet - il est trop large, il repose sur une opinion et sollicite des recommandations sur les outils (même si je ne suis pas contre, car la question est bien écrite et claire). Désolé, mais je pense qu'il est préférable de donner un retour d'information que de ne pas le faire
Dave
1
Stack Overflow dispose de bonnes ressources: recherchez et remplacez à l'aide de DOS , ainsi que la version Windows . Ils devraient être au moins quelque chose pour vous aider à démarrer.
Mokubai

Réponses:

0

Tout comme dans la vente de maisons, les trois choses les plus importantes sont l' emplacement, l'emplacement, il semble qu'en répondant aux questions, les trois choses les plus importantes soient la motivation, la motivation et ... apparemment. Voici ma solution, ça marche à merveille. N'hésitez pas à commenter, tout est sujet à amélioration. <3 <3 <3

taskkill /im TOTALCMD64.EXE
IF %USERDOMAIN% == GwenKillerby goto Win10
echo win8
    powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'D\:\\', 'QzQ' } | Set-Content f:\totalcmd852\wincmd.ini"    
    powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'C\:\\', 'D:\' } | Set-Content f:\totalcmd852\wincmd.ini"    
    powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'QzQ', 'C:\' } | Set-Content f:\totalcmd852\wincmd.ini"    
    powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace '\\',  '\'   } | Set-Content f:\totalcmd852\wincmd.ini"    
goto ProgStart
:Win10
echo win10
     powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'C\:\\', 'QzQ' } | Set-Content f:\totalcmd852\wincmd.ini"
     powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'D\:\\', 'C:\' } | Set-Content f:\totalcmd852\wincmd.ini"
     powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace 'QzQ', 'D:\' } | Set-Content f:\totalcmd852\wincmd.ini"
     powershell -Command "(Get-Content f:\totalcmd852\wincmd.ini) | ForEach-Object { $_ -replace '\\',  '\'   } | Set-Content f:\totalcmd852\wincmd.ini"
:ProgStart
    f:\totalcmd852\TOTALCMD64.EXE 

(BTW: si quelqu'un peut me dire pourquoi dans 'C\:\\', 'D:\''C' a besoin de deux barres obliques, alors que pour 'D' une suffira, je serais si heureuse.)
J'ai d'abord essayé de la conditionner à la version Windows via un fichier tmpfile qui est un fichier. manière plus élégante et robuste.

rem VER > tmpFile
rem set /p myvar= < tmpFile
rem del tmpFile

Mais je ne pouvais pas le faire fonctionner, alors j'ai utilisé UserWther. En outre, les sorties de VER dans Win10 et 8 sont pratiquement identiques: Microsoft Windows [6.xxx] par rapport à Microsoft Windows [10.xxx] , ce qui signifie que vous devez utiliser ces jetons effrayants, brrrr!
Je suis ouvert à toute solution comportant moins de lignes ou moins complexe que. Ou, vous savez, un script / batfile PS complet ...;););)

GwenKillerby
la source