我需要以可靠的方式为Windows和XP创建%tab%(包含一个制表符)。
SET TAB=" "
适用于Windows 7(未经测试)但适用于Win XP(已测试)。
此
for /F "skip=4 delims=pR tokens=1,2" %%a in ( 'reg query hkcu\environment /v temp' ) do set TAB=%%b
仅适用于Win XP。
答案 0 :(得分:9)
您应该使用支持TAB字符的编辑器而不将其更改为空格
你应该重新排序引号,就像set TAB=" "
你得到一个带有三个字符的变量一样
TAB还包含引号。
set "TAB= "
目前似乎没有可靠的方法来使用程序在所有语言平台上的所有Windows版本中创建TAB字符。
但您也可以使用嵌入式Jscript代码段。
@if (@X)==(@Y) @goto :Dummy @end/* Batch part
@echo off
SETLOCAL ENABLEEXTENSIONS
for /f "delims=" %%x in ('cscript //E:JScript //nologo "%~f0"') do set TAB=%%x
echo Tab character is "%tab%"
goto :EOF
***** Now JScript begins *****/
WScript.Echo(String.fromCharCode(9));
答案 1 :(得分:2)
将制表符加入批处理文件中。特别是,将它放在@ECHO OFF
前面的第一行,然后使用SET /P
命令读取第一行。当然,它会读取整行,因此需要再一个SET
命令来从行中剪切制表符。这是一个例子:
@ECHO OFF
<%0 SET /p tab=
SET tab=%tab:~0,1%
ECHO Every%tab%word%tab%is%tab%tabulated
请注意,此处@ECHO OFF
之前的空格应该是单个制表符,就像我之前所说的那样。
答案 2 :(得分:2)
这种方法在Win2k,WinXP,Vista,Win7,Win8,Win10上的工作方式基本相同
利用了Microsoft编译器工具集生成的 PE 可执行映像的 MZ 标题,从近25年前的日子开始,它仍然保持不变。 NT3.1直到今天,在Windows 10的时代。
MZ头的偏移量0x46处的字节值是0x09,即 TAB 字符 因此,从Windows中选择任何可执行文件并从中获取TAB就足够了。
最方便和最合理的选择是使用命令处理器本身的可执行文件。
@echo off
setlocal EnableExtensions
set "TAB="
for /F "delims=" %%Z in (
'^(type "%COMSPEC%"^|^(^(for /L %%P in ^(1^,1^,70^) do @pause^>nul^)^&set /p "TAB="^&call echo^,%%TAB%%^)^)2^>nul'
) do set "TAB=%%Z"
set "TAB=%TAB:~0,1%"
echo,
echo TAB---^>[%TAB%]^<---TAB SPACE---^>[ ]^<---SPACE EMPTY---^>[]^<---EMPTY
echo,
pause
UPDATE April,23,2018
这是一种替代且更易理解的语法,它避免使用管道,并且比上面的
快得多((for /L %%P in (1,1,70) do pause>nul)&set /p "TAB=")<"%COMSPEC%"
set "TAB=%TAB:~0,1%"
<强> / UPDATE 强>
回应TAB使用此表格:
echo,%TAB%
将TAB字符写入文件:
:: Creates a new file with TAB character
echo,%TAB%>"NewFile.txt"
:: Appends the TAB character to end of the existing file
echo,%TAB%>>"ExistingFile.txt"
请注意, echo 将始终在末尾添加新行(CRLF)。如果你只想要没有换行的TAB角色,请使用提示技术,但请记住,与echo相比,此方法极慢,因此不要过度使用
setlocal
set "prompt=%TAB%"
"%COMSPEC%" /d /k<nul>"TAB_Without_NewLine.txt"
endlocal
答案 3 :(得分:1)
下面的df.plot.scatter(x='Supply',
y='Demand',
alpha=0.2,
figsize=(6,6),
s=100,
linewidths=0.0,
marker='h')
子例程创建制表符并将其存储在传递给它的变量的名称中。需要:makeTab
,某些版本的 Windows XP 上未安装此版本。
certutil
PS:想想看,上面的子程序可以很容易地扩展到你想要的任何角色(除了NUL)。注意代码页问题,包括ASCII 128和ASCII 255之间的字符。
答案 4 :(得分:1)
如DosTips topic中所述,可以使用(或滥用?)隐藏的forfiles
命令生成制表符(或您喜欢的任何其他字符,除了NUL)。
简而言之:
@echo off & setLocal enableExtensions disableDelayedExpansion
for /f "delims= " %%T in ('
forFiles /p "." /m "%~nx0" /c "cmd /c echo(0x09"
') do set "tab=%%T"
echo(words%tab%separated%tab%by%tab%tabs
endLocal & goto :EOF
但是,forfiles
仅适用于 Windows Vista 及更高版本。但是振作起来,我的小 XP 兔子!由于奇妙的forfiles.zip,您可以下载Wayback Machine(22.1kb)的化石副本。
答案 5 :(得分:1)
使用robocopy TAB也可以生成。 默认情况下,Windows XP中没有Robocopy。
for /f "delims= " %%T in ('robocopy /L . . /njh /njs') do set "TAB=%%T"
答案 6 :(得分:1)
DosTips用户aGerman在2011年shutdown /?
的输出中首先reported the presence of a tab character,而去年5月的jeb精制the technique for extracting it是这样的:
@echo off & setLocal enableExtensions disableDelayedExpansion
for /f "delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 " %%T in ('
shutDown /?
') do set "tab=%%T"
set "tab=%tab:~0,1%"
echo(words%tab%separated%tab%by%tab%tabs
endLocal & goto :EOF
警告:不保证可以在所有版本的 Windows 或所有区域设置中使用。我在我的英文版 Windows 7 HP 32位上成功测试了上述内容,但是ymmv。
答案 7 :(得分:0)
感谢您的回答。
最后我使用了这个简单的方法:
FOR /f "delims=" %%x IN (delimiter.ini) DO set TAB=%%x
答案 8 :(得分:0)
我为最后一次保存了最好的! ;)
由于我要与jeb这样的权威相矛盾,他的answer已超过5年,并且已经开发了一种技术来创建仅使用原生batch的制表符}命令,适用于 XP 以后的所有 Windows 版本。
下面的:makeTab
子例程基于Create All ASCII Characters上马拉松DosTips主题中开发的代码。它使用makecab
创建制表符(ASCII 9)并将其存储为变量,并将名称作为参数传递给它:
@echo off & setLocal enableExtensions disableDelayedExpansion
call :makeTab tab
echo(words%tab%separated%tab%by%tab%tabs
endLocal & goto :EOF
:makeTab result=
:: returns tab char in var name given as param
:: based on http://consolesoft.com/batch/binary/genchr.cmd
setLocal
set "tabFile=%tmp%\tab.tmp"
if not exist "%tabFile%" (goto makeTabFile) else goto readTabFile
:makeTabFile
type nul >"%tabFile%"
makeCab /d compress=off /d reservePerDataBlockSize=0 ^
/d reservePerFolderSize=9 "%tabFile%" "%tabFile%" >nul
for /f "skip=28 delims=" %%F in ('find /v "" "%tabFile%"') do (
>"%tabFile%" echo(%%F
goto readTabFile
) %= for /f =%
:readTabFile
for /f "useBack delims= " %%T in ("%tabFile%") do (
endLocal & set "%1=%%T"
) %= for /f =%
exit /b 0 %= makeTab =%
可以轻松修改子程序以创建您喜欢的任何字符(除了NUL),只要您知道所需字符的ASCII代码即可。注意ASCII 128和255之间的代码页问题。
答案 9 :(得分:0)
我的解决方案非常简单:
set TAB= "
set "TAB=%TAB:"=%
echo one!TAB!two!TAB!three
一个两个两个三个