-1

Я пишу сценарий, который:
1. Определяет, на какой ОС он работает, win10 или win8 (только эти два варианта)
2. Три Найти и Заменить- Действия
3. запускает программу, которая ему принадлежит.
Ниже приведен примерный пакетный скрипт 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 

Я хотел бы помочь с первыми 3 линиями. Благодарю.

1 ответ1

0

Точно так же, как при продаже домов, три самые важные вещи - это местоположение, местоположение, местоположение, кажется, что, отвечая на вопросы, три самые важные вещи - это мотивация, мотивация и мотивация... очевидно. Вот мое решение, оно работает как шарм. Не стесняйтесь комментировать, все подлежит улучшению .. <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 

(Кстати: если кто-нибудь может сказать мне, почему в 'C\:\\', 'D:\' ' C ' требуется две косые черты, в то время как для' D 'достаточно одной, я был бы так счастлив.)
Во-первых, я попытался сделать его условным для версии Windows через tmpfile, что является более элегантным и надежным способом.

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

Но я не мог заставить его работать, поэтому я использовал UserWh независимо. Кроме того, выходные данные VER в Win10 и 8 практически идентичны: Microsoft Windows [6.xxx] и Microsoft Windows [10.xxx], что означает работу с этими жуткими токенами, брррр!
Я открыт для любого решения, которое имеет меньше строк или является менее сложным, чем. Или, вы знаете, полный сценарий PS /batfile ... ;););)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .