Пакетный скрипт не отображает весь вывод - PullRequest
0 голосов
/ 05 июля 2019

У меня есть входной текстовый файл с некоторыми именами серверов

Я пытаюсь заменить 'новую строку' для каждого сервера на |.

abcdef.abcdef.abcdef
testing
example

Когда выполняется в cmd.exe мой скрипт не анализирует все строки из входного файла.Скажем, если у меня во входном файле 1000 серверов, я могу видеть вывод в окне командной строки для примерно 500 серверов.

@echo off
setlocal enableextensions
SETLOCAL EnableDelayedExpansion
rem Purpose - To remove domain name of servers and convert line by line strings to | seperated strings.

type nul > Del_Output.txt

for /f "tokens=1 delims=." %%a in (Downtime.txt) do (

  echo(%%a>> Del_Output.txt
)
type Del_Output.txt

rem Initialize the output line
set "line="

rem Catenate all file lines in the same variable separated by "|"
for /F "delims=" %%a in (Del_Output.txt) do set "line=!line!|%%a"

rem Show final line, removing the leading "|"

rem echo !line:~1!>FinalOutput.txt
echo !line:~1!
rem type "C:\Users\AAithal\Desktop\MoogSoft_Downtime\FinalOutput.txt"
ENDLOCAL

Некоторые указатели по этому вопросу были бы очень полезны.

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Это должно работать:

@echo off
setlocal

set "first="
< nul (
for /F "delims=." %%a in (Downtime.txt) do (
   if not defined first (
      set "first=1"
      set /P "=%%a"
   ) else (
      set /P "=|%%a"
   )
)
echo/
) > Output.txt

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

Решение не использовать переменную для сбора выходных данных. Команда set /P позволяет выводить строку без LF в конце, поэтому строки ввода просто объединяются в длинную строку вывода.

1 голос
/ 06 июля 2019
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q56905805.txt"

SET "outline="
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 FOR /f "tokens=1*delims=." %%i IN ("%%a") DO IF "%%j"=="" (
  SET "outline=!outline!|%%a"
 ) ELSE (
  IF DEFINED outline ECHO !outline!
  SET "outline=%%i"
 )
)
IF DEFINED outline ECHO !outline!
GOTO :EOF

Вам необходимо изменить настройку sourcedir в соответствии с вашими обстоятельствами.В листинге используется настройка, которая подходит для моей системы.

Я использовал файл с именем q56905805.txt, содержащий ваши данные для моего тестирования.

Параметр usebackq требуется только потому, что я решил добавитькавычки вокруг имени файла источника.

Назначьте каждую строку %%a, затем разберите ее с разделителем.Он содержит разделитель, это новый сервер, поэтому выведите предыдущий и начните заново, иначе накопите с необходимым разделителем.

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