5

我需要使用批处理将单个空格键添加到文本文件

但是以下dosnt工作

ECHO  >C:\txt.txt

这会产生文本 Echo is (off) 代替???

我正在使用 Windows 批处理

4

7 回答 7

6

echo正在打印文本“ECHO if off”,因为您没有为其提供任何参数。如果您键入echo /?使用说明,您将看到此行为已定义:“键入不带参数的 ECHO 以显示当前回声设置”。因此,在您的情况下,回声设置为关闭。

如果您想在没有换行符和回车的情况下使用空格字符,您很可能需要使用set. 如果您使用的是 Windows XP,这应该很容易。

视窗

>txt.txt ( <nul set /p "= " ) 

如果您运行的是 Vista 或更高版本,它会有点棘手,因为 Windows 会在 set 命令上去掉前导空格。

Windows Vista 或更高版本

您需要创建一个退格字符,然后打印:

:: Create a backspace character
for /f %%A in ('"prompt $H &echo on &for %%B in (1) do rem"') do set BS=%%A

<nul set /p=%BS% > txt.txt

请注意,这实际上并不打印空格,而是打印退格字符。我不太确定这是否适合你,但我想不出更简单的方法。否则,您可能最好使用其他一些脚本语言,例如 python 或 powershell。

于 2012-12-20T15:04:38.577 回答
2
  1. 回显一个空格(+ 换行符)

    ECHO. > C:\txt.txt
    

    请注意,这也会输出回车加换行符(回车)。所以你的文件将变成 3 个字节。

  2. 或者,您可以使用 0 字节创建文件

    fsutil file createnew c:\txt.txt 1
    

    只是这不会添加空格,而是添加 0 字符。

  3. 或者,您可以创建一个带有单个空格的文件,然后将其复制到txt.txt每次需要包含空格的位置。

  4. 使用外部工具,例如echon.exe来自这个 zipfile来自这个站点)。它模仿echo -n,就像它在 Linux 中可用一样。

于 2012-12-20T14:16:30.707 回答
2

SET /P 不仅在 Vista 及更高版本上不打印前导空格,也无法打印前导空格=

以下是适用于从 XP 开始的所有现代 Windows 版本的代码:

@echo off
setlocal enableDelayedExpansion
for /f %%A in ('copy /Z "%~dpf0" nul') do set EOL=%%A^


:: The above two empty lines are critical - DO NOT REMOVE
<nul set /p "=x!EOL! " >temp.tmp
findstr /v $ temp.tmp >file.txt
del temp.tmp

上述技术可以扩展为支持打印几乎任何不带换行符的字符串,但有一些例外:

于 2013-10-18T04:06:08.897 回答
2

要使用 Win Vista 或更高版本创建单个空间,您不能再使用该SET/P命令(如 dbenham 所述)。

但是你可以使用copy命令

@echo off
setlocal EnableDelayedExpansion
call :createSub
call :echoWithoutLinefeed "=hello"
call :echoWithoutLinefeed " world"
exit /b

:echoWithoutLinefeed
> txt.tmp (echo(%~1!sub!)
copy txt.tmp /a txt2.tmp /b > nul
type txt2.tmp
del txt.tmp txt2.tmp
exit /b

:createSub
copy nul sub.tmp /a > nul
for /F %%a in (sub.tmp) DO (
   set "sub=%%a"
)
del sub.tmp
exit /b

首先,文本是简单的输出,ECHO但最后在appendsSUB之前附加了一个字符。ECHOCR LF

并且copy inputfile /a outputfile /b所有字符都被复制到第一个SUB字符。

于 2013-10-18T06:36:43.360 回答
1

以下是 32 位 Windows 的两种方法:

此方法直接使用十六进制 20(空格)创建文件:

@echo off
(for %%v in (E100''20 Nfile.tmp RCX 01 W Q) do @echo %%v)|debug >nul
ren file.tmp "file with a single space.txt"

这一个从 file.tmp 文件中删除两个尾随字符

@echo off
set f=file.tmp
echo. >%f%
(for %%v in (E100''83''E9''02 L103 P N%f% W103 Q) do echo %%v)|debug %f% >nul
ren %f% "file with a single space.txt"
于 2013-10-18T06:55:04.220 回答
0

这将适用于 Vista 和更高版本,任何位数。

@echo off
(
echo -----BEGIN CERTIFICATE-----
echo IA==
echo -----END CERTIFICATE-----
)>file.tmp
certutil -decode file.tmp "file with a single space.txt" >nul
del file.tmp
于 2013-10-18T08:01:48.353 回答
0

这是在不创建临时文件的情况下创建单字节单空间文件的方法。

cmd /d /c (prompt=$S) ^& cmd /d /k <nul >SingleSpace.txt
于 2018-04-04T22:54:36.680 回答