Вывод нескольких переменных без пробелов между ними - PullRequest
0 голосов
/ 13 января 2019

В пакетном файле

Возможно ли, чтобы оператор FOR отображал некоторые переменные в файле .txt несколько раз в одной строке и БЕЗ пробела между ними? Как?

Пока я пробовал это:

FOR /f "tokens=*" %i in test.txt do (echo | set /p d="%i">>new.txt )

В основном test.txt содержит случайное число в каждой строке, и я хочу, чтобы эти числа отображались как единое целое в новом файле. Но между каждым из них остаются пробелы.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

В вашем исходном файле должны быть завершающие пробелы.

Чтобы решить, вы можете использовать несколько методов.

1) Используйте токены = 1 в цикле for / F

Обратите внимание, что это работает, только если в строке есть только одно значение, а это n-е значение (в данном случае n = 1).

FOR /f "tokens=1" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt )

Y:\>type new.txt
4912734109111317117319738888888888

2) Используйте вторую петлю «для», чтобы убрать конечные пробелы.

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

Y:\>FOR /f "tokens=*" %i in (test.txt) do @(for %i in (%~i) DO @(echo.| set /p "d=%~i">>new.txt ) )

Y:\>type new.txt
491273410911131711731973658888888888

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

REM Initial Setup No Spaces:

Y:\>echo.>new.txt
Y:\>echo.4>>test.txt
Y:\>echo.9>>test.txt
Y:\>echo.12>>test.txt
Y:\>echo.7>>test.txt
Y:\>echo.34>>test.txt
Y:\>echo.10>>test.txt

REM Test Original Method and Result:

Y:\>FOR /f "tokens=*" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt )

Y:\>type new.txt
491273410

REM Clear Result and Add More values including ones with lots of spaces:

Y:\>echo.>new.txt
Y:\>echo. 9 >>test.txt
Y:\>echo. 11>>test.txt
Y:\>echo.13 >>test.txt
Y:\>echo.17>>test.txt
Y:\>echo.    11>>test.txt
Y:\>echo.            73              >>test.txt
Y:\>echo.19>>test.txt
Y:\>echo.            73           65   >>test.txt
Y:\>echo.8888888888>>test.txt

REM Test Original Method and Result:
Y:\>FOR /f "tokens=*" %i in (test.txt) do @(echo.| set /p "d=%~i">>new.txt )

Y:\>type new.txt
4912734109 1113 171173              1973           65   8888888888

REM Reset Results File, Test New Method, and show results:

Y:\>echo.>new.txt

Y:\>FOR /f "tokens=*" %i in (test.txt) do @(for %I in (%~i) DO @(echo.| set /p "d=%~I">>new.txt ) )

Y:\>type new.txt
491273410911131711731973658888888888
0 голосов
/ 13 января 2019

Вы можете попробовать это.

@echo off
set str=
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do set "str=!str!%%i"
echo|set /p str=!str!>>new.txt

обратите внимание, последняя строка может быть echo !str!>>new.txt, но я просто использовал echo|set, чтобы исключить любую новую строку.

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