回声多个变量之间没有空格

时间:2019-01-13 18:31:58

标签: batch-file cmd

在批处理文件中

FOR语句是否可以在同一行上多次回显.txt文件中的某些变量,而在它们之间不留空格?怎么样?

到目前为止,我已经尝试过:

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

基本上,test.txt在每一行中都包含一个随机数,我想在新文件中将这些数字作为一个回显。但这会在它们之间保持空格。

3 个答案:

答案 0 :(得分:0)

您可以尝试一下。

@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来消除任何换行符。

答案 1 :(得分:0)

源文件中必须有尾随空格。

要解决此问题,可以使用两种方法。

1)在/ F循环中使用令牌= 1

请注意,这仅在行上只有一个值且为第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)使用第二个“ for”循环删除尾随空格。

注意:我选择的方法将删除行中的所有空格,因此,如果您有两个数字,并且故意在一行上之间有一个空格,则该空格将被删除。如果您只希望抓住第一个任期,或者如果您希望在这种情况下保留空格,那么可以进行其他更改。

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

答案 2 :(得分:0)

这消除了文件中的任何换行符:

@echo off
SETLOCAL DisableDelayedExpansion EnableExtensions

<nul >NoCRLF.txt (FOR /F useback^ delims^=^ tokens^=*^ eol^= %%L in ("test.txt") do set/p"=%%L")

限制

  • 空白行将被跳过,但这并不重要,因为所有\n\r\n都会被剥离。
  • 行不能以= <SPACE> <TAB> <NBSP>开头