如何在CMD中创建%tab%

时间:2012-06-04 08:05:08

标签: tabs batch-file cmd

我需要以可靠的方式为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。

10 个答案:

答案 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年,并且已经开发了一种技术来创建仅使用原生的制表符}命令,适用于 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

一个两个两个三个