Cmd прочитать файл в переменную

Обновлено: 06.07.2024

Я хочу получить результат команды в виде переменной в пакетном сценарии Windows (см., Как получить результат команды в bash для эквивалента сценария bash). Решение, которое будет работать с файлом .bat, является предпочтительным, но также приветствуются другие распространенные решения сценариев Windows.

Джон, найти этот очень полезный вопрос до смешного сложно . Не могли бы вы рассмотреть вопрос о добавлении альтернативного фразировки , как Как захватить на выходе из аа программы в переменную в пакетном файле с Windows?

Если вам нужно захватить весь вывод команды, вы можете использовать такой пакет:

Все выходные строки сохраняются в VAR, разделенные знаком "!".

@John: есть ли в этом практическая польза? Я думаю, вам стоит посмотреть PowerShell или любой другой язык программирования, способный легко выполнять скриптовые задачи (Python, Perl, PHP, Ruby).

Ответ в одну строку решит конкретный случай, который у меня есть. Я просто подумал, что есть вариант с несколькими строками (или более простой вариант с одной строкой). Я думаю, возможности файлов bat не так уж велики. Это необходимо для сценариев летучих мышей, обертывающих приложения Java. В основном создание путей к классам. Будьте с этим очень осторожны. GWT также пытался использовать командные файлы для запуска Java с определенными путями к классам, что ужасно провалилось, как только вы попали в каталоги с символами, отличными от ASCII (в этом случае это был мой дом :)). С тех пор они переписали это с помощью VBS. есть ли в этом практическая польза? Ты смеешься? Это постоянно используется в других оболочках (думаю, во всех оболочках GNU / Linux), и это очень полезно. @PiotrDobrogost Я думаю, что он пытался сказать, что сценарии bash - это ужасный пережиток прошлого (вам нужно использовать цикл for только для захвата вывода программы? Серьезно?), И если вы когда-нибудь дойдете до сути там, где вам нужно использовать переменные, вам следует использовать что-то более современное, например PowerShell. Практическое применение, собственно, есть . вроде как. Я хочу использовать сценарий PowerShell, чтобы найти конкретный путь к Visual Studio, но то, что мне нужно из этого пути, - это пакетный файл, который устанавливает кучу переменных env, поэтому я могу вызвать editbin . Итак, мне нужно найти путь и вернуть его вызывающему экземпляру, cmd чтобы я мог запустить его там. . Да, это ужасно, как звучит. Visual Studio иногда заставляет меня плакать. @ Ajedi32 Я думаю, вы хотели сказать, что пакетные скрипты - это ужасный пережиток прошлого. ;)

Скромный командир за годы накопил несколько интересных способностей:

Чтобы записать конвейерное выражение, используйте ^| :

Как и в случае с ответом @PabloG, это будет работать только для получения последней строки вывода команды, в данном случае «date / t». Я обнаружил, что ваш ответ работает только тогда, когда я использовал двойные знаки процента, то есть FOR /F "delims text-muted font-weight-lighter"> — Rabarberski @Rabarberski: Если вы вводите for команду прямо в командной строке, вы используете одиночный % . Если вы используете его в пакетном файле, вы используете %% . @tardate: Не могли бы вы рассказать, как будет выглядеть скрипт, если команде нужно передать аргумент % , например: for /f "delims text-muted font-weight-lighter"> — dma_k @degenerate Команда действительна при условии, что date используемая команда исходит от Cygwin. Я согласен, я должен был упомянуть об этом.

Чтобы получить текущий каталог, вы можете использовать это:

Хотя он использует временный файл, поэтому он не самый красивый, но, безусловно, работает! «CD» помещает текущий каталог в «tmpFile», «SET» загружает содержимое tmpFile.

Вот решение для нескольких строк с "массивом":

Но вы можете подумать о переходе на другую, более мощную оболочку или создать приложение для этого. Это немного расширяет возможности командных файлов.

Есть ли вариант, который будет работать для захвата нескольких строк из команды? Чтобы получить текущий каталог, вы можете использовать echo% CD%

У этой ссылки есть команда " Set /P _MyVar=<MyFilename.txt ", которая говорит, что она будет установлена _MyVar на первую строку из MyFilename.txt . Это может быть использовано как myCmd > tmp.txt «с set /P myVar=<tmp.txt ». Но он получит только первую строку вывода, а не весь вывод

В этой ссылке есть команда «Set / P _MyVar = <MyFilename.txt», которая говорит, что она установит _MyVar на первую строку из MyFilename.txt. Его можно использовать как «myCmd> tmp.txt» с «set / P myVar = <tmp.txt». Но он получит только первую строку вывода, а не весь вывод. Этот ответ предназначен для таких начинающих, как я

Пример установки в переменной среды "V" самого последнего файла

в пакетном файле вы должны использовать двойной префикс в переменной цикла:

Я видел этот подход раньше, но он кажется действительно хакерским. У него также есть проблема, заключающаяся в том, что он захватывает только последнюю строку вывода команды в переменной.

Просто используйте результат FOR команды. Например (внутри командного файла):

  • Это вызовет себя с результатом команды CD, так же, как pwd.
  • Извлечение строки по параметрам вернет имя файла / папку.
  • Получите содержимое этой папки и добавьте в filename.txt

[Кредиты] : Спасибо всем остальным ответам и некоторым копаниям на странице команд Windows XP .

Спасибо за ответ! Хотя фрагмент кода может ответить на этот вопрос, все же здорово добавить дополнительную информацию, например, объяснить и т. Д.

К приведенным выше решениям я хотел бы добавить замечание:

Все эти синтаксисы работают отлично, ЕСЛИ ВАША КОМАНДА НАЙДЕНА В ПУТИ или ЕСЛИ КОМАНДА ЯВЛЯЕТСЯ cmdpath БЕЗ ПРОБЕЛОВ ИЛИ СПЕЦИАЛЬНЫХ СИМВОЛОВ.

Но если вы попытаетесь использовать исполняемую команду, расположенную в папке, путь которой содержит специальные символы, вам нужно будет заключить путь к вашей команде в двойные кавычки ("), и тогда синтаксис FOR / F не будет работать.

В этом случае единственное решение, которое я нашел для использования команды и сохранения ее результата в переменной, - это установить (временно) каталог по умолчанию для самой команды:

Тогда результат правильный:

Конечно, в приведенном выше примере я предполагаю, что мой пакетный сценарий находится в той же папке, что и одна из моих исполняемых команд, так что я могу использовать синтаксис «%

p0». Если это не ваш случай, вам нужно найти способ найти путь к вашей команде и изменить каталог по умолчанию на его путь.

Если у кого-то есть лучшее решение для таких команд, доступных через сложный путь, я буду очень рад услышать об этом.

1 EXIT /b for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "А=а" "Б=б" "В=в" "Г=г" "Д=д" "Е=е" "Ж=ж" "З=з" "И=и" "К=к" "Л=л" "М=м" "Н=н" "О=о" "П=п" "Р=р" "С=с" "Т=т" "У=у" "Ф=ф" "Х=х" "Ц=ц" "Ч=ч" "Ш=ш" "Щ=щ" "Ь=ь" "Ы=ы" "Ъ=ъ" "Э=э" "Ю=ю" "Я=я") do ( call set %

ЗАМЕНА ОДНОЙ ПОДСТРОКИ НА ДРУГУЮ В ФАЙЛЕ

В результате, в папке, где будет запущен приведенный выше текст, создастся файл sbs2.com.
Возможно, вы будете приятно удивлены его размером - 659 БАЙТ!
Те, кому вышеприведенные изыски кажутся излишними, могут скачать готовую утилиту здесь.
Использование:
sbs2.com 0 "Old String" "New String" < infile > outfile
Осуществляется замена всех вхождений Old String на New String в файле infile. Результат запишется в файл outfile.

Такую задачу можно решить без использования сторонних программ, только средствами bat !
Ниже приведен пример с использованием локальной процедуры txtrepl

setlocal ENABLEDELAYEDEXPANSION echo off call :txtrepl end finish C:\1\24i.bat C:\1\24i.ba1 pause exit :txtrepl rem param - find, repl, from, to set FINDTXT=%1 set REPLTXT=%2 if EXIST %3 ( set FILEFROM=%3 ) else ( echo error. Not found file %3 pause exit ) set FILEOUT=%4 set COUNT=0 for /F "tokens=*" %%n in (!FILEFROM!) do ( set /A COUNT=!COUNT!+1 set LINE=%%n set TMPR=!LINE:%FINDTXT%=%REPLTXT%! if !COUNT! == 1 ( Echo !TMPR!>!FILEOUT! ) else ( Echo !TMPR!>>!FILEOUT! ) ) exit /b rem end of proc

Вывод на экран, в файл текста без перевода строки

В bat/cmd командах не предусмотрена возможность вывода данных без перевода строки. Но для решения такой задачи можно использовать некую уловку.
Команда set с параметром, предусматривающим ввод данных с экрана, позволяет вывести подсказку для ввода без перевода строки. Вот этим мы и воспользуемся.
<nul set /p a=text В данном случае, слово text (а здесь может быть и переменная) будет выведено но экран без перевода строки. Значение переменной a при этом не будет изменено (если это для вас важно).
Соответственно, для вывода текста в файл без перевода строки используется конструкция:
<nul set /p a=text>b.txt

Использование этого приема в сочетании с символом backspace (код 08) позволяет сделать вывод на экран изменяемого текста и как вариант - "вращающейся палки".

Вычисление длины строковой переменной

В bat/cmd командах нет функции, позволяющей вычислять длину строковой переменной. А такая задача возникает не так уж и редко. Однако средств командного языка достаточно, для того что бы решить такую задачу, не прибегая к использованию специальных программ. Рассмотрим несколько вариантов решения данной задачи:

1 :startvarcount if not defined var exit /b set var=%var:

1% set /a %2+=1 goto startvarcount exit /b

set st=abcdefghijklmnopqrstuvwxyz . call :var_сount2 %st% count2 echo %count2%

Еще один вариант вычисления длины строковой переменной:

:StringLen :: ----------------------- :: Нахождение длины строки :: ----------------------- :: %1 - текстовая строка :: ----------------------- Set $StringLen=0 Set $StringBuf=%

1" GoTo :EOF :StringLenLoop Set /A $StringLen+=1 Call Set $StringChr=%%$StringBuf:

%$StringLen%%% If ""=="%$StringChr%" GOTO :EOF GoTo :StringLenLoop

Еще один способ определения длины строки, как ни странно - достаточно быстрый:

n0.tmp" For %%i In ("%TEMP%\%

n0.tmp") Do Set /A z=%%

Ну и, наконец, решение, поразившее меня своей математической лаконичностью:

:strLen string len -- returns the length of a string :: -- string [in] - variable name containing :: the string being measured for length :: -- len [out] - variable to be used :: to return the string length :: Many thanks to 'sowgtsoi', but also 'jeb' :: and 'amel27' dostips forum :: users helped making this short and efficient :$created 20081122 :$changed 20101116 :$categories StringOperation :$source http://www.dostips.com ( SETLOCAL ENABLEDELAYEDEXPANSION set "str=A!%

1!"&rem keep the A up front to ensure we rem get the length and not the upper bound rem it also avoids trouble in case of empty string set "len=0" for /L %%A in (12,-1,0) do ( set /a "len|=1%<<%%A" for %%B in (!len!) do ^ if "!str:

1<<%%A" ) ) ( ENDLOCAL & REM RETURN VALUES IF "%

set "string=12345678901234 " call :strLen string len echo len=%len%

Для себя я так же использую метод половинного деления для нахождения количества символов в строке. Эта процедура менее изящна, и, возможно, потребует несколько большего времени для вычислений, чем приведенная выше, но, на мой взгляд, она понятнее. (В этом месте надо было похвалить себя еще, но что-то не нашлось достойных эпитетов)
Привожу на всякий случай и эту процедуру ))

@echo off setlocal ENABLEEXTENSIONS SetLocal EnableDelayedExpansion set "string=123456789012345678901" call :strLen string len echo len=%len% pause exit :strLen string len :: - string [in] - variable name containing the string :: -- len [out] - variable to be used to return the string length SETLOCAL ENABLEDELAYEDEXPANSION set /a nn=10 & rem max length string = 2^^nn. rem If nn=10 - max length=1024 set /a mmin=0 set /a mmax=1"<<"%nn% set "str=Q!%1!" for /L %%A in (%nn%,-1,1) do ( set /a BB = ^(!mmin! + !mmax!^) ">>" 1 call set sim=%%str:

!BB!,1%% if "!sim!" == "" ( set /a mmax=!BB!) else ( set /a mmin=!BB! ) ) ENDLOCAL & SET /a %

2=%mmin% EXIT /b %mmin%

Получение подстроки.

Если смещение начала подстроки и ее длина являются константами - здесь все достаточно просто и аналогичный пример рассматривался выше:

Прошу прощения, если в качестве значения переменной str я опубликовал чей-то пароль )).
Если же одна или обе эти величины - переменные, то решение будет не столь простое.
Здесь встретиться возможно не совсем обычное применение команды CALL. Немного глубже об этом на странице Полезное в разделе Особенности использования команды CALL. Там же рассмотрен и этот пример.
Итак, рассмотрим возможные решения:

SetLocal EnableDelayedExpansion set str=123qwerty456 set n1=3 set n2=6 Set d2=!str:

Или как вариант предыдущего

setlocal ENABLEEXTENSIONS SetLocal EnableDelayedExpansion set str=zaq12wsx set n1=3 set n2=6 call :SUBSTRING str,%n1%,%n2% echo %SUBD% . :SUBSTRING set SUBD=!%1:

Удаление ведущих и замыкающих пробелов.

:ALLTRIM :: ----------------------- :: Krasner B. :: ----------------------- :: %1 - var with txt string :: ----------------------- SetLocal EnableDelayedExpansion set /a firstnoblank=-1 set /a lastnoblank=0 set /a curpos=1 set "str=Q!%1!" :StringLenLoop set SUBD=!str:

%curpos%,1! if "!SUBD!" == "" GoTo :formrez if NOT "!SUBD!" == " " ( if !firstnoblank! == -1 set firstnoblank=!curpos! set lastnoblank=!curpos! ) set /a curpos = !curpos!+1 GoTo :StringLenLoop :formrez set /a n1=!firstnoblank!-1 set /a n2=!lastnoblank!-!firstnoblank!+1 if !firstnoblank! == -1 (set "rez primer"> set "strr=" Call :ALLTRIM strr echo result ALLTRIM ^>%strr%^< . set "strrr= 22 33 " Call :ALLTRIM strrr echo result ALLTRIM ^>%strrr%^<

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь

Вторая часть поста, в котором будут рассмотрены основные команды для работы с файлами. В первой части было рассказано про то, как удалить файл и каталог используя cmd.exe, если Вы не читали, то советую прочитать. В этом посте будут рассмотрены команды, которые позволят пользователю…

  • Перемещать файлы.
  • Переименовывать файлы.
  • Выводить содержимое файлов в консоль.
  • Записывать в файл (txt) результат выполнения команды.

Как всегда, все команды будут представлены Вашему вниманию в сопровождении коротких, но ясных описаниях, а так же будут прилагаться «Пошаговые» скриншоты.

Первым делом, я расскажу, как переместить файл из одной директории в другую.

Как переместить файл через консоль?

Для перемещения файлов используется команда под названием «MOVE». Что бы переместить файл из корня диска «C:\ Move.txt» в папку, в моём случаи это «С:\Test_Move» пишем в консоль:

Как переместить файл через консоль

Результат выполнения команды. Файл «Move.txt» был перемещён в папку «Test_Move»

Если Вам нужно переместить все файлы с конкретным расширением, то в этом случаи стоит писать так:

Как переместить файл через консоль?

Для примера я создал 3 файла «Move_1.txt, Move_2.txt и Move_3.txt» Как видно из скриншота выше, все три файла были перемещённых. В этом можно убедится не закрывая консоль.

Для проверки используем команду «DIR»

Как переместить файл через консоль?

Как переместить файл через консоль?

Если ввести символ «Y» то файл будет перезаписан. При этом содержимое уже имеющегося файла в каталоге «C:\Test_Move\» будут потеряны.

Если ввести символ «N» файл не будет перемещён.

Если ввести «ALL» то будут перемещены и перезаписаны все файлы с конкретным расширением. При этом, также, содержимое файлов в директории «C:\Test_Move\» будут потеряны.

Примечание: За место «ALL» можно просто ввести букву «А» результат будет додже.

Как переместить файл через консоль?

Что бы отключить предупреждения используется ключик «/Y»

Как переместить файл через консоль?

Теперь все файлы будет перемещены и перезаписаны без всяких предупреждений. Будьте внимательны, можно потерять важную информацию.

Как переименовать файл через cmd.exe?

Для того, чтобы переименовать существующий файл используется команда «RENAME» Я создал файл с именем «test.txt» в корне диска «С:\» что бы его переименовать, скажем в «NEW_Name.txt» пишем в консоли.

Как переименовать файл через cmd.exe?

Файл «test.txt» будет переименован.

Примечание: Команду «RENAME» можно писать короче, просто «REN» от этого результат не изменится.

Можно сменить расширения у всех файлов в каталоге, например с «txt» на «cmd». Для этого делаем так:

Как переименовать файл через cmd.exe?

Теперь уже в знакомой нам папке «Test_Move» все 3(три) файла приобретут расширение «cmd» за место «txt»

Как вывести содержимое файла в консоль?

Если появилась необходимость просмотреть содержимое файла прямо в cmd. Для этого пользуемся командой «TYPE» Я создал файл и написал в нём адрес своего блога. Теперь попробуем просмотреть данный файл из консоли, не запуская его обычном, привычным образом.

Как вывести содержимое файла в консоль?

В общем все просто. Но как быть с файлами большего размера, где много информации? В этак случаи содержимое файла нужно выводить с паузой, чтобы просмотреть его полностью.

Для этого пишем так:

Как вывести содержимое файла в консоль?


Для примера взял текст с первого попавшегося забугорного сайта.

В конце добавляем «| more» таким образом содержимое файла будет выводится не полностью а отрывками, чтобы просмотреть следующею часть файла жмём «Enter»

Как записать в файл результат выполнения команды?

Для примера запишем в файл результат команды «DIR» В консоль пишем:

Как записать в файл результат выполнения команды?

Обратите внимание на символ «>» он то и играет здесь главную роль. В итоге появится файл на диске «C:\» с именем «Save.txt» куда будет записан результат выполнения команды.

Если Вам понадобится записать результат команды «DIR» ещё раз, то файл «Save.txt» будет перезаписан и ранние содержимое файла будет удалено!

Что бы этого избежать и просто добавить новый результат не удаляя старый, стоит использовать символ «>» два раза, то есть вот так:

Как записать в файл результат выполнения команды?

Теперь файл не будет перезаписан, в него просто добавится новый результат в конец файла.

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











Здесь хотелось бы заметить, что проблема с кодировками будет при написании скрипта, на любом из родных для системы языков - cmd, vbscript, jscript.

Можно только сожалеть об отсутствии и решить эту проблему одним из следующих способов:
1. установить один из пакетов, содержащих достаточный набор команд, чтобы быть также уверенным как в командной строке unix, например, UnixUtils, Cygwin, GnuWin32
Иногда это не возможен из-за политик компаний, запрещающих самостоятельно устанавливать дополнительное ПО.
2. использовать PowerShell
Хотя все идет к тому, что PowerShell будет предустановлен на всех Windows, однако еще много систем на которых его нет. А установить нельзя.
3. написать собственный скрипт
Это уже выход, если 1 и 2 противопоказаны. Хотя есть свои недостатки (например упомянутая проблема - кодировки).

Я решил попробовать (частично или полностью) эмулировать работу некоторых важных команд обработки текстовых файлов средствами самой командной строки. Just for fun!
.
1. Количество строк в файле
Оказывается почти точно определить количество строк в файле очень просто:

И вот пример. Данная команда выводит немного дополнительной информации

Сказав "почти точно", я имел в виду, то что иногда результаты отличаются от видимого. Но этим грешат многие команды. Например, wc -l отбрасывает последнюю строку, если она не заканчивается переводом строки. В случае с find /c /v "" наблюдается расхождение с действительностью, если в конце файла несколько (более 2) пустых строк. По-видимому разные программы работают по разному - одни считают количество строк, другие количество переводов строк. И вследствие этого они могут различаться. Поэтому я рекомендую использовать следующее решение.

Команда выведет только размер файла в строках. И это самый точный способ узнать количество строк в файле.

Коли я упомянул в самом начале PowerShell, приведу примеры реализации с его помощью (я не знаток его синтаксиса и тонкостей, поэтому привожу некоторые, известные мне реализации, возможно не самые удачные, но полностью рабочие). Прелесть этих решений еще в том, что это однострочные команды (вики на англ):

.
2. Прочитать n последних строк в файле. Эмуляция команды tail
Оказывается, это очень простая задача:
1. узнать N - количество строк в файле;
2. вывести n строк, пропустив N-n:

.
Код на PowerShell:

.
3. Вывод нескольких начальных строк файла. Эмуляция команды head
Этот эмулятор я написал первым, хотя он не самый простой в реализации. Возможно, существуют варианты лучше, но, к сожалению, я их не нашел и, поэтому, я использовал "хак" с временным файлом. Суть его в том, что вначале создается временный файл, который содержит n-ое количество следующих строк:

то есть все номера требуемых строк.

Затем читается искомый файл, при этом каждая строка нумеруется, а команда поиска ищет только те строки номера которых соответствуют номерам из заданного временного файла.

.
И на последок, традиционно, код на PowerShell:

.
Послесловие
Здесь я привел только заготовки, но уже рабочие заготовки, которые частично решают проблему отсутствия полезных команд. Для полноценной эмуляции можно предусмотреть работу не только с заданным файлом или группой файлов, но и с консолью, и реализовать конвейерную обработку. Также можно было бы добавить проверку установки PowerShell в системе и, если он есть, выполнять его команды.

хеад и тайл в одном флаконе

smaharbA, как во флаконе дело обстоит с пустыми строками в файле?

  • Rumata
  • Разработчик
  • Неактивен











smaharbA
alexii
Коллеги. Во флаконе только head. Там нет tail.

есть там тайл - смотрите внимательно

alexii - не знаю, должно быть вроде как нормально, поправьте

smaharbA, я имел в виду, что разбор «for /f» пропускает пустые строки.

  • Rumata
  • Разработчик
  • Неактивен











Согласен. Но это не совсем то. В отличие от tail, more +N пропускает N строк из потока. И результат совершенно не предсказуем для потока в конвейере.

  • Rumata
  • Разработчик
  • Неактивен











разбор «for /f» пропускает пустые строки

Но вот посмотрите на этот пример:

  • greg zakharov
  • Разработчик
  • Неактивен

Код на PowerShell:
echo (get-content -path %windir%.

Слишком сложно, не находите?

А если нужно передать команду PoSh, то будет примерно так:

  • blackfox.blacktail
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Добрый день.
Использовал пример для подсчета количества строк в файле:

13 Ответ от smaharbA 2013-09-01 10:37:46

чем не устраивает ?

14 Ответ от blackfox.blacktail 2013-09-03 10:22:45

  • blackfox.blacktail
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

2smaharbA
Если есть пустая строка, с символом SUB, её тоже считает.
Проще избавиться от этого символа, что я и сделал.
(При использовании copy, нужно поставить ключ /B)

15 Ответ от greg zakharov 2013-09-03 15:52:47

  • greg zakharov
  • Разработчик
  • Неактивен

EQU

Если есть пустая строка, с символом SUB, её тоже считает.

На оном спотыкается и Ruby (версия старая, до установки последней дело никак не доходит).

16 Ответ от smaharbA 2013-09-03 17:27:15

17 Ответ от greg zakharov 2013-10-13 10:27:59 (изменено: greg zakharov, 2013-10-13 10:28:42)

  • greg zakharov
  • Разработчик
  • Неактивен

Возможно, существуют варианты лучше, но, к сожалению, я их не нашел и, поэтому, я использовал "хак" с временным файлом.

head без временных файлов.

Может быть, но сколько бы не пробовал на выходе одинаковый результат. Может у меня на Win2k3 find специфический?

18 Ответ от Мальчик-гей 2013-10-17 09:04:37

  • Мальчик-гей
  • Участник
  • Неактивен

Может быть, но сколько бы не пробовал на выходе одинаковый результат.

Коллега smaharbA прав:

19 Ответ от greg zakharov 2013-10-17 11:51:48

  • greg zakharov
  • Разработчик
  • Неактивен

Смысл то один и тот же - количество строк в файле. А отбрасывать из вывода имя файла - дело вкуса. Так что это скорее "не равноценно", нежели "не эквивалентно". Или Вы русский язык как-то на свой лад интерпретируете?

20 Ответ от Rumata 2013-10-17 13:17:45

  • Rumata
  • Разработчик
  • Неактивен











greg zakharov
В данном случае smaharbA прав. Результат обеих команд одинаковый, но вывод - разный. Это как в JavaScript

21 Ответ от Мальчик-гей 2013-10-21 13:38:14

  • Мальчик-гей
  • Участник
  • Неактивен

Так что это скорее "не равноценно", нежели "не эквивалентно". Или Вы русский язык как-то на свой лад интерпретируете?

Дорогой коллега! Я понимаю эквивалентность вполне академически, как отношение, обладающее свойствами рефлексивности, симметричности и транзитивности. И в этом смысле на одном и том же классе объектов могут быть заданы различные отношения эквивалентности, так что объекты эквивалентные в одном отношении не будут эквивалентны в другом. Вспомните хотя бы конгруэнтность и подобие геометрических фигур. В рамках же этой темы требовалась более сильная эквивалентность, с совпадением формата вывода результатов, так как всё началось с

Команда выведет только размер файла в строках.

чему smaharbA и предложил эквивалентную именно в этом отношении замену.
По поводу "равноценно" и "эквивалентно" советую заглянуть в словарь, а ещё лучше, попробовать самому догадаться как же слово "эквивалентно" переводится на русский.

22 Ответ от greg zakharov 2013-10-21 15:07:13 (изменено: greg zakharov, 2013-10-21 16:40:40)

  • greg zakharov
  • Разработчик
  • Неактивен

. советую заглянуть в словарь, а ещё лучше, попробовать самому догадаться как же слово "эквивалентно" переводится на русский.

Простите, у Вас филологическое образование? Или Вы страдаете дислексией, что не вполне можете разуметь написанное? Тем паче, что

Я понимаю эквивалентность вполне академически, как отношение, обладающее свойствами рефлексивности, симметричности и транзитивности.

Вы сами дали понять, что всякую иную интерпретацию слова "эквивалентность" Вы просто-напросто игнорируете, что сужает Ваш кругозор до ортодаксального математического видения проблемы, вкупе с дезинтеграцией русского языка как такового, из чего следует заключить, что спор с Вами представляется трюизмом, а точнее софистикой, - ни одного аргумента с Вашей стороны не последовало.

undefined == null // true
undefined === null // false

Не приплетайте сюда, пожалуйста, javascript. null и undefined - это два тривиальных типа данных, каждый из которых определяет только одно значение. Однако, заявлять об их эквивалентности, как-то однако. Считается, что у значение null - объектный тип. При всем этом значение null уникально и отличается от любых других. Если переменная равна null, значит в ней не содержится допустимого объекта (массива, числа, строки и т.д.) undefined же возвращается же либо при обращении к переменной, которй никогда не присваивалось значение, либо к свойству объекта которого не существует. При этом null и undefined не эквивалентны друг другу, несмотря на то, что оператор эквивалентности считает их равными, - это написано в любой книге по javascript. Это можно также утверждать и потому, что в отличии от null значение undefined не является зарезервированным словом. Если будет время, почитайте на досуге, например, Дэвида Флэнегана, если точно помню и не делайте скоропалительных выводов.
Резюмирую, несмотря на общую схожесть многих языков, абсолютизировать понятие эквивалентности не стоит, - если не каждый, то некоторые из языков вкладывают собственное понятие в "эквивалентность", причем будь то естественный язык или язык программирования. То, что выдает в командном языке одинаковый результат, но лишь с некоторым "мусором", знаете ли еще не повод утверждать что заяц - это волк и вообще не млекопитающее, а аргументы г-на Мальчик-гей не убедительны, ибо таким образом можно доказать все что угодно, в том числе что и Ленин был грибом.

Читайте также: