我需要使用批处理将单个空格键添加到文本文件
但是以下dosnt工作
ECHO >C:\txt.txt
这会产生文本 Echo is (off) 代替???
我正在使用 Windows 批处理
我需要使用批处理将单个空格键添加到文本文件
但是以下dosnt工作
ECHO >C:\txt.txt
这会产生文本 Echo is (off) 代替???
我正在使用 Windows 批处理
echo
正在打印文本“ECHO if off”,因为您没有为其提供任何参数。如果您键入echo /?
使用说明,您将看到此行为已定义:“键入不带参数的 ECHO 以显示当前回声设置”。因此,在您的情况下,回声设置为关闭。
如果您想在没有换行符和回车的情况下使用空格字符,您很可能需要使用set
. 如果您使用的是 Windows XP,这应该很容易。
>txt.txt ( <nul set /p "= " )
如果您运行的是 Vista 或更高版本,它会有点棘手,因为 Windows 会在 set 命令上去掉前导空格。
您需要创建一个退格字符,然后打印:
:: 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。
回显一个空格(+ 换行符)
ECHO. > C:\txt.txt
请注意,这也会输出回车加换行符(回车)。所以你的文件将变成 3 个字节。
或者,您可以使用 0 字节创建文件
fsutil file createnew c:\txt.txt 1
只是这不会添加空格,而是添加 0 字符。
或者,您可以创建一个带有单个空格的文件,然后将其复制到txt.txt
每次需要包含空格的位置。
使用外部工具,例如echon.exe
来自这个 zipfile(来自这个站点)。它模仿echo -n
,就像它在 Linux 中可用一样。
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
上述技术可以扩展为支持打印几乎任何不带换行符的字符串,但有一些例外:
字符串不能包含回车符
XP FINDSTR 会将大多数控制字符和许多扩展的 ASCII 字符显示为点。请参阅Windows FINDSTR 命令有哪些未记录的功能和限制?了解更多信息。
要使用 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
之前附加了一个字符。ECHO
CR LF
并且copy inputfile /a outputfile /b
所有字符都被复制到第一个SUB
字符。
以下是 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"
这将适用于 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
这是在不创建临时文件的情况下创建单字节单空间文件的方法。
cmd /d /c (prompt=$S) ^& cmd /d /k <nul >SingleSpace.txt