Команда пакетного эха не записывает в файл

Следующий тестовый пакетный файл должен добавить строку, содержащую текущую дату, за которой следует текущее время, а затем текстовую строку, в файл output.csv, но это не так. Дата, время и текстовая строка записываются в соответствующие временные файлы, но три объединенные строки не записываются с помощью echo в файл output.csv, который даже не создается, хотя и записывается temp-out.txt. В чем дело?

date /t > temp-date.txt
time /t > temp-time.txt
:: actual external program will be here
echo textstring > temp-out.txt

set /p var-date =< temp-date.txt
set /p var-time =< temp-time.txt
set /p var-out =< temp-out.txt

set /p full_line = %var-date% %var-time% %var-out%
echo %full_line% >> output.csv

Вы создали переменную с именем full_line[space]. Не используйте пробелы в именах переменных.

Squashman 14.08.2024 00:17

Итак, set /p "var-date = " 0<"temp-date.txt", set /p "var-time = " 0<"temp-time.txt", set /p "var-out = " 0<"temp-out.txt". Также эта строка неправильная set /p full_line = %var-date% %var-time% %var-out%. Должно быть set "full_line=%var-date% %var-time% %var-out%".

Compo 14.08.2024 00:22

В качестве примечания: :: actual external program will be here должно быть rem actual external program will be here, echo textstring > temp-out.txt должно быть (echo textstring) 1>"temp-out.txt", а echo %full_line% >> output.csv должно быть (echo %full_line%) 1>>"output.csv".

Compo 14.08.2024 00:29

Я могу вам сказать @ЯрославРахматуллин. Проблема классифицируется как опечатка, а это просто случай неиспользования документированного синтаксиса для команды set: set [/p] <variable> = [<promptString>] вместо set [/p] <variable>=[<promptString>] и set [<variable> = [<string>]] вместо set [<variable>=[<string>]]. Всем отправителям следует сначала проверить справочную информацию для каждой из своих команд, прежде чем задавать вопрос. Таким образом, этот вопрос не представляет никакой ценности для сообщества, поскольку все будущие подобные проблемы также можно решить, прочитав ту же самую легкодоступную информацию.

Compo 14.08.2024 01:58

@ЯрославРахматуллин Закрытие действительно. На SO есть множество сообщений, где добавление пробела до или после = в batch-file вызывает проблему и поэтому считается опечаткой. Причина также была разъяснена в комментарии @Squashman и не требует дополнительных ответов.

Gerhard 14.08.2024 07:59

Мои ответы на вопрос Почему после использования «set var = text» в командной строке не выводится строка с «echo %var%»? и по вопросу Почему команда ECHO печатает в файл лишний конечный пробел? подробно объяснить, почему в командном файле следует использовать командные строки, предоставляемые Compo.

Mofi 14.08.2024 18:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пробел до и после знака равенства имеет значение в Windows cmd. Это то, что вы хотите:

date /t > temp-date.txt
time /t > temp-time.txt
:: actual external program will be here
echo textstring > temp-out.txt

set /p var-date=<temp-date.txt
set /p var-time=<temp-time.txt
set /p var-out=<temp-out.txt

set full_line=%var-date% %var-time% %var-out%
echo %full_line% >> output.csv

Флаг /p используется для запроса пользователя или предположительно для чтения со стандартного ввода. В первых трех случаях использование /p допустимо, поскольку чтение выполняется с помощью специального синтаксиса =<. Однако в последнем наборе его следует удалить, поскольку все значения находятся в других переменных и их не нужно считывать.

Вы также можете упростить:

echo %var-date% %var-time% %var-out% >> output.txt

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

Compo 14.08.2024 01:57

Я бы рекомендовал вам запустить скрипт как есть и проверить, что он делает. В вашем комментарии говорится, что нужно убрать пробелы вокруг знака =. В моем ответе нет пробелов.

Ярослав Рахматуллин 15.08.2024 02:49

Я рекомендую вам точно рассказать мне, каково содержание output.csv, включая все пробелы!

Compo 15.08.2024 12:30

Несколько лишних мест еще никому не вредили. Не принимайте близко к сердцу. Со временем ОП узнает все, что им нужно. Кроме того, другие комментарии уже закрыли лишние пробелы. Вам не нужно охватывать все крайние случаи и все лучшие практики в каждом ответе. Подумайте об этом.

Ярослав Рахматуллин 16.08.2024 00:11

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

Compo 16.08.2024 00:54

Другие вопросы по теме