Назад | Перейти на главную страницу

Почему командная строка Windows изменяет команду при запуске из файла .bat?

Если я хочу запустить команду

md5deep -rb . | find /I ".jpg" | sort > local.md5

и я запускаю его из командной строки, он показывает точно так же, как я набирал, но когда я помещаю его в файл .bat и запускаю его, я вижу вот что:

md5deep -rb .   | find /I ".jpg"   | sort  1>local.md5

Кажется, что вкладки вставляет перед | и получается > в 1>. Зачем? Сначала я подумал, что это как-то связано с кодировкой, но это простой файл ANSI.

Это имеет какое-либо отношение к @@ превращение @ внутри файлов .bat?

Не о чем беспокоиться. Просто так Windows CMD парсер выводит строки, если вы не подавляете вывод "трассировки", используя:

@echo off

или

@commandname

Я не уверен, что вы имеете в виду @@ против @ (кроме, возможно, вышеуказанного). Я не знаю ничего особенного о @@, если вы не путаете это с %% против % для имен переменных.

1> относится к тому, как стандартный выход перенаправляется внутри файла bat.

У вас есть два канала: один для стандартного вывода (1>) и один для стандартного вывода ошибок (2>). Они используют либо 1>, либо 2> для обработки и обеспечивают два разных типа обратной связи при выполнении. У меня есть этот список для разных перестановок перенаправления:

command > file      Write standard output of command to file
command 1> file     Write standard output of command to file (same as previous)
command 2> file     Write standard error of command to file (OS/2 and NT)
command > file 2>&1     Write both standard output and standard error of command to file (OS/2 and NT)
command >> file     Append standard output of command to file
command 1>> file    Append standard output of command to file (same as previous)
command 2>> file    Append standard error of command to file (OS/2 and NT)
command >> file 2>&1    Append both standard output and standard error of command to file (OS/2 and NT)
commandA | commandB     Redirect standard output of commandA to standard input of commandB
commandA 2>&1 | commandB    Redirect standard output and standard error of commandA to standard input of commandB (OS/2 and NT)
command < file  command gets standard input from file
command 2>&1    command's standard error is redirected to standard output (OS/2 and NT)
command 1>&2    command's standard output is redirected to standard error (OS/2 and NT)

Это взято с отличного веб-сайта Роба ван дер Вуда, посвященного сценариям Win32: http://www.robvanderwoude.com/redirection.php

Роб