Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 2
1

Перевести код с Bash (Linux) на Batch (Windows)

11.10.2020, 17:59. Просмотров 1794. Ответов 30
Метки нет (Все метки)

Я новичок и мне срочно нужно написать точно такую же программу в формате .bat, я перерыл кучу источников, но так и не смог этого сделать. Прошу помогите, вот код:

Bash
1
2
3
4
5
#!/bin/bash
touch file.txt
echo "lol it was easier than I thought">file.txt
cat file.txt |tr -cd 't' | wc -m
sleep 5s
Впринципе мне нужно перевести только одну строчку:

Bash
1
cat file.txt |tr -cd 't' | wc -m
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2020, 17:59
Ответы с готовыми решениями:

Перевести код с Bash (Linux) на Batch (Windows)
возникла потребность компилировать свой свофт под ОС Windows, есть написанный мною подобный файл на...

Перевести строку кода с Bash на Batch
вот необходимый мне код нашел, хотелось в DOS перевести... $find . -print0 -name "*.php" | xargs...

Перевести код с Batch на VBScript
Добрый вечер. Появилась необходимость перевести несколько скриптов из формата bat/cmd в vbs/js :...

Оболочка BASH в Windows (Windows Service for Linux)
Информация, которую можно получить по состоянию на текущий момент, заставляет отнестись серьёзно к...

30
436 / 309 / 127
Регистрация: 29.05.2016
Сообщений: 1,743
11.10.2020, 19:19 2
Naisan, на чистом cmd не напишите. Тут нужны компилированные утилиты linux. Если не мешает ничего их поставить, то напишу легко
0
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
11.10.2020, 22:23 3
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off&setlocal
set "itext="lol it was easier than I thought""
call:length %itext:t=% n
call:length %itext% s
set /a length=%slength%-%nlength%
echo %length%
>nul timeout 5
exit
 
:length
echo %~1>file.txt&for %%i in (file.txt) do set/a %2length=%%~zi
0
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 2
12.10.2020, 17:05  [ТС] 4
FlasherX, спасибо огромное. Это именно то что нужно. Ещё раз спасибо!!!
0
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
12.10.2020, 20:49 5
Пожал'ста. Можно чуть короче:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
set "itext="lol it was easier than I thought""
call:length %itext:t=% -
call:length %itext% +
echo %length%
>nul timeout 5
exit
 
:length
echo %~1>file.txt&for %%i in (file.txt) do set/a length%2=%%~zi
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
12.10.2020, 22:46 6
А теперь как это выглядит на самом деле, а не в форме говнокода:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
PS > echo $null > file.txt
PS > echo "lol it was easier than I thought">file.txt
PS > cat file.txt  # смотрим содержимое
lol it was easier than I thought
PS > (cat file.txt) -replace "[^t]",""| Measure -char
 
Lines Words Characters Property
----- ----- ---------- --------
                     4
 
 
PS > sleep -s 5
Разница между двумя вариантами чисто косметическая:
Код
touch file.txt                                     | echo $null > file.txt   
echo "lol it was easier than I thought">file.txt   | echo "lol it was easier than I thought">file.txt 
cat file.txt |tr -cd 't' | wc -m                   | (cat file.txt) -replace "[^t]",""| Measure -char
sleep 5s                                           | sleep -s 5
1
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
13.10.2020, 00:48 7
Цитата Сообщение от Garry Galler Посмотреть сообщение
как это выглядит
Без разницы, как выглядит, скорость выполнения здесь куда существенней. C Bat консоль сразу выдаст результат, а c ps1 будет дико тупить.
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 02:15 8
Цитата Сообщение от FlasherX Посмотреть сообщение
C Bat консоль сразу выдаст результат, а c ps1 будет дико тупить.
Вовсе нет, если запускать из интерпретатора Powershell, а не cmd. На текущий момент в windows командной оболочкой по умолчанию является консоль Powershell. (Ты же помнишь, что Powershell как интерпретатор выполняет код быстрее интерпретатора cmd (да и vbs\jscript) раз в 100-500?)
Да и как-то странно держаться за устаревший, плохочитабельный и малофункциональный синтаксис cmd только из-за каких-то мелочей запуска кода.
Вот код на С++ вообще сначала скомпилировать надо. И как только люди им пользуются...
1
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
13.10.2020, 03:29 9
Цитата Сообщение от Garry Galler Посмотреть сообщение
Вовсе нет, если запускать из интерпретатора Powershell, а не cmd.
Вовсе да, если запускать нормальным, то бишь коротким и привычным для подавляющего большинства способом (листбокс, тулбар или на крайняк гуи-комстрока), а не через какую бы то ни было прокладку в виде отдельно вызываемой консоли.

Кликните здесь для просмотра всего текста
Цитата Сообщение от Garry Galler Посмотреть сообщение
Ты же помнишь, что Powershell как интерпретатор выполняет код быстрее интерпретатора cmd (да и vbs\jscript) раз в 100-500?
Почему я должен что-то подобное "помнить"? Весьма сомнительные данные с учётом разных показаний на разных итерациях. Можно даже на простых циклах проэкспериментировать, чтобы убедиться в их недостоверности:
VBS — 0,00488 сек.:
Visual Basic
1
2
3
4
5
Option Explicit: Dim t, i
t = CDbl(timer)
For i = 1 To 100000
Next
WSH.echo timer - t

PS — 0.17-0.2 сек.
PowerShell
1
2
3
4
5
$watch = [System.Diagnostics.Stopwatch]::StartNew()
$watch.Start()
for ($i=0; $i -lt 100000; $i++){}
$watch.Stop()
Write-Host $watch.Elapsed
Как видим, в 35+ раз vbs выигрывает.
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 14:21 10
Цитата Сообщение от FlasherX Посмотреть сообщение
Как видим, в 35+ раз vbs выигрывает.
Считать холостые циклы крайне глупо и наивно. Но иного я и не ожидал. Возьми реальную задачу.
Кстати, ты ведь не в курсе, но в Powershell есть параллельный foreach.

Добавлено через 4 минуты
Цитата Сообщение от FlasherX Посмотреть сообщение
а не через какую бы то ни было прокладку в виде отдельно вызываемой консоли.
Какую то чушь ты сейчас написал. В Window10 cmd уже заменен на Powershell.

Добавлено через 53 минуты
Скажи мне за какое время выполняется этот код.
Я не смог дождаться его окончания.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim Words
set FSO = CreateObject("Scripting.FileSystemObject")
Words = Array("aaaaaaaaaa","bbbbbbbbbb","ccccccccccccc")
 
StartTime = Timer()
for idx= 0 to UBound(Words)
    Text = ""
    for i=1 to 3000000
        Text = Text & Words(idx) & vbCrLf
    next
    set OFile = FSO.OpenTextFile("test" & CStr(idx) & ".txt", 8, True)
    OFile.Write(Text)
    OFile.Close
next
 
EndTime = Timer()
 
MsgBox EndTime - StartTime
Powershell вариант ту же операцию делает за 5 секунд.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
workflow CreateDict($words) {
    foreach –parallel ($w in $words){
    $workflow:c++
    sc ("test"+$c+".txt") ([Linq.Enumerable]::Repeat($words[$c-1],3000000));
   }
 }
 
 
$sw=[Diagnostics.StopWatch]::StartNew()
measure-command {CreateDict ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}
"$($sw.Elapsed)"
1
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
13.10.2020, 14:30 11
Медаль за оффтоперство по праву твоя.
Цитата Сообщение от Garry Galler Посмотреть сообщение
Считать холостые циклы крайне глупо и наивно.
Ну да, проще состроить буку, чем признать неправомерность фейкового тезиса. Что действительно глупо — так это вызывать консоль для вызова скрипта...
Кликните здесь для просмотра всего текста
Цитата Сообщение от Garry Galler Посмотреть сообщение
Какую то чушь ты сейчас написал. В Window10 cmd уже заменен на Powershell.
Нет, чушь пишешь ты. Я пишу о вменяемом запуске, а ты сюда зачем-то консоли подвязываешь.
Фейк про замену даже не знаю как комментировать. Замена подразумевает добавку одного с удалением другого.
Может, ты у себя случайно выпилил cmd.exe и подумал, что всё, финиш, батники у всех пересали работать. Но это не так. ))
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 14:45 12
Цитата Сообщение от FlasherX Посмотреть сообщение
Медаль за оффтоперство по праву твоя.
Значит по существу ответить нечего? Держи медальку "За Бесславный провал".

Добавлено через 2 минуты
Цитата Сообщение от FlasherX Посмотреть сообщение
чем признать неправомерность фейкового тезиса.
Научись читать документацию: https://support.microsoft.com/... b6fb29a45f
Никто не говорил, что cmd выпилили. cmd заменили по дефолту.
3
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
13.10.2020, 14:56 13
Цитата Сообщение от Garry Galler Посмотреть сообщение
Значит по существу ответить нечего?
По существу как раз ответ и дан с провалом тезиса про 100500-кратное ускорение выполнения идентичного (а не абы какого) кода. А на оценку неравноценно написанных кодов я не подписывался. Да и неинтересно в контексте темы, хочешь создай отдельную ветку (можешь даже в моей группе по скриптам начать первый тред), там и обсуждай, если так эта тема цепляет.
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 14:59 14
Цитата Сообщение от FlasherX Посмотреть сообщение
По существу как раз ответ и дан с провалом тезиса про 100500-кратное ускорение выполнения идентичного (а не абы какого) кода.
Ты замерил пустоту. Такие замерщики вроде тебя примерно также "доказывали", что PHP быстрее С++.

Добавлено через 1 минуту
Цитата Сообщение от FlasherX Посмотреть сообщение
А на оценку неравноценно написанных кодов я не подписывался
А кто виноват, что VBS такой ограниченный?
0
2678 / 1400 / 537
Регистрация: 06.06.2017
Сообщений: 4,644
13.10.2020, 15:09 15
Цитата Сообщение от Garry Galler Посмотреть сообщение
Научись читать документацию ... cmd заменили по дефолту.
в меню, которое появляется при щелчке правой кнопкой мыши по кнопке "Пуск" или при нажатии клавиш Windows+X.
Спасибо, насмешил. Никогда не пользовался ни тем ни другим...
Цитата Сообщение от Garry Galler Посмотреть сообщение
Ты замерил пустоту. Такие замерщики вроде тебя примерно также "доказывали"
Я замерил работу for, а не пустоту, а такие замерщики, как ты, сравнивают несравнимое.
Цитата Сообщение от Garry Galler Посмотреть сообщение
А кто виноват, что VBS такой ограниченный?
Он, конечно, ограничен, как и всё в нашем мире, но это не значит, что код надо писать через пень-колоду.
0
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 18:21 17
Цитата Сообщение от FlasherX Посмотреть сообщение
И поэтому твой вывод — это вывод школьника.
Замерить пустой цикл и думать, что чего ты доказал этим...
[вырезано]

Напиши хотя бы один вариант, который сравнится с самым медленным из представленных. Я аналоги (с StringBuilder и ArrayList на vbs уже написал - работают две минуты).
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# TotalMilliseconds : 5519,4925
workflow CreateFiles1($words) {
    foreach –parallel ($w in $words){
    $workflow:c++
    sc ("test"+$c+".txt") ([Linq.Enumerable]::Repeat($words[$c-1],3000000));
   }
 }
 
# TotalMilliseconds: 7179,608 
function CreateFiles2($words) {
   for ($i=0; $i -lt $words.length; $i++){
       $text = New-Object -TypeName "System.Text.StringBuilder";
       for ($j=0; $j -lt 3000000; $j++) {
           $text.Append($words[$i] + "`n")
       }
       sc ("c:/test"+$i+".txt") $text.ToString()
   }
}
 
 
# TotalMilliseconds:  9633,8864
function CreateFiles3($words) {
   for ($i=0; $i -lt $words.length; $i++){
       [System.Collections.ArrayList]$list = @()
       for ($j=0; $j -lt 3000000; $j++) {
           $list.Add($words[$i])
       }
       [IO.File]::WriteAllLines("c:/test"+$i+".txt", $list)
   }
}
 
 
# TotalMilliseconds : 9654,5516
function CreateFiles4($words) {
    for ($i=0; $i -lt $words.length; $i++){
        [System.Collections.ArrayList] $list = @()
        for ($j=0; $j -lt 3000000; $j++) {
            $list.Add($words[$i]) 
        }
       
        $text = [string]::join("`n", $list.ToArray())
        sc ("c:/test"+$i+".txt") $text
   }
 }
 
# TotalMilliseconds : 43724,648
function CreateFiles5($words) {
    for ($i=0; $i -lt $words.length; $i++){
        [System.Collections.ArrayList] $list = @()
        for ($j=0; $j -lt 3000000; $j++) {
            $list.Add($words[$i]) 
        }
        
        $text = $list -join "`n"
        sc ("c:/test"+$i+".txt") $text
   }
 }
 
 
 
(measure-command {CreateFiles1 ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}).TotalMilliseconds
(measure-command {CreateFiles2 ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}).TotalMilliseconds
(measure-command {CreateFiles3 ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}).TotalMilliseconds
(measure-command {CreateFiles4 ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}).TotalMilliseconds
(measure-command {CreateFiles5 ("aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc")}).TotalMilliseconds
 Комментарий модератора 
Garry Galler, не переходите на личности и оскорбления.
0
358 / 157 / 25
Регистрация: 11.03.2018
Сообщений: 686
13.10.2020, 18:45 18
Garry Galler, ещё не было случая, чтобы данного персонажа ( FlasherX ) удалось убедить,
он не принимает разумные аргументы; но в данном случае он настолько глупо подставился,
что даже неудобно его 'добивать'.
2
Эксперт Python
3840 / 2838 / 944
Регистрация: 28.10.2013
Сообщений: 7,379
13.10.2020, 18:48 19
bidstrup,
А ведь я реально поверил его замеру работы пустого цикла vbs.
А сейчас решил перепроверить и оказалось, что несколько раз подряд время его выполнения было равно ... нулю.
И лишь через раз - тысячным долям секунды как у него.
То есть либо vbs-овский таймер не состоянии измерить правильное время, либо (что логичнее) цикл оптимизируется и просто убирается.
0
bidstrup
13.10.2020, 19:19     Перевести код с Bash (Linux) на Batch (Windows)
  #20

Не по теме:

Garry Galler, vbs мог бы стать хорошим инструментом, если бы был хорошо продуман с точки зрения языкового дизайна или если бы хотя бы закрывал все вопросы по автоматизации задач через ком. строку. Но этого не произошло, в 90-х наверное был упущено время, а потом, когда появился .Net, опираться на COM-технологию стало ненужным( опять же, наверное, никакой инсайдерской информацией не обладаю, просто предполагаю )




Не по теме:

Цитата Сообщение от Garry Galler Посмотреть сообщение
То есть либо vbs-овский таймер не состоянии измерить правильное время, либо (что логичнее) цикл оптимизируется и просто убирается.
Так кто же их, маньяков, знает ? (с) 8-)

Вот кто, к примеру, мешал богатой Микрософт сделать vbs хорошим инструментом ?
У меня хранится MSDN за 2000-й год, сколько там материалов по vbs, с богатыми практ. примерами, с описанием внутр. кухни ? Сам же и отвечу - с гулькин хер. Никакой любви родителя к дитю. Отсюда и результат.

0
13.10.2020, 19:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2020, 19:19
Привет! Вот еще темы с ответами:

Visual c++ код перевести в gcc linux код
Ниже есть код. Нужно сделать так, что бы он компилировался и работал в линуксе(компиляция с помощью...

Перевод скрипта с Bash на Batch
Доброго времени суток, подскажите, возможно ли переделать следующий скрипт под бат файл? Заранее...

bash в linux
помогите пожалуйста!) вобщем нужно создать справочник (bash скрипты) который в терминале...

Перевести код с чистого C++ на Windows Forms
Может кто-нибудь помочь перевести с консольного типа на windows forms? Вот код: #include...

Перевести код из консоли в Windows Forms
программа считает иассу стержня, но через консоль, а теперь требуют, чтобы все это было в виде...

Перевести код с C# в VB.NET с Windows Forms
Здравствуйте, помогите перевести код с c# в vb.net и чтобы программа работала не через консоль, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.