Перенаправить стандартный ввод подпрограммы в пакетном режиме Windows - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь написать своего рода скрипт перенаправления, чтобы стабилизировать исполняемый файл в формате clang, используемый Visual Studio, над различными моими проектами.

Например:

  • Проект 1: имеет формат .clang на основе LLVM 5.0.0
  • Проект 2: имеет формат .clang на основе LLVM 8.0.0

Таким образом, вместо использования стандартного clang-формата я пытаюсь использовать clang-format.cmd, который использовался на основе проекта.

Мой текущий подход:

@echo OFF
:checkFormat
IF EXIST "clang-format.exe" ( 
   call clang-format.exe %* <&0 >&1
) ELSE (
   REM Loop the dir tree until the root the of the disk
   if "%cd:~3,1%"=="" (
      exit -1
   )
   cd ..
   goto checkFormat
)

Однако всякий раз, когда этот скрипт вызывается из Visual Studio, я получаю сообщение об ошибке:

Произошла ошибка при форматировании с ClangFormat Труба закончилась.

Я попытался заменить вызов другим cmd, который печатает что-то в файл, и кажется, что он не вызывается. Тем не менее, я уже добавил аналогичное создание файла перед вызовом, который подтверждает, что он достигнут, и в каталоге, который я ожидаю.

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

EDIT При запуске из-под CMD-подсказки выдает следующую ошибку:

Дескриптор не может быть продублирован при перенаправлении ручки 0.

1 Ответ

1 голос
/ 27 апреля 2019

Удалите деталь <&0 >&1, потому что конструкции неправильные.

>&1 будет интерпретироваться как

добавить дескриптор 1 (STDOUT) для обработки 1 (STDOUT)

Это не может работать.

<0& будет интерпретироваться почти так же, как

добавить дескриптор 0 (STDIN) для обработки 0 (STDIN)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...