2012-06-04 91 views
2

我需要可靠的方式为Windows和XP创建%选项卡%(包含一个制表符)。如何在CMD中创建%选项卡%

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 

作品只赢XP。

+0

REG查询HKCU \环境/ V温度之间的代码页问题当心让你的Temp目录的位置。这与你需要做什么有关? 'tab'变量应该包含什么? –

+0

我需要生成供循环使用的制表符。该命令在Win XP上创建了一个制表符。 – user1141649

回答

9

您应该使用支持制表符的编辑器,而不必将其更改为空格。
你应该重新排列报价,与set 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)); 
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的空间应该是一个制表符,就像我刚才说。

+0

这是个好主意,但更简单的应该是创建一个带有一个选项卡的新文件,并阅读此文件。谢谢。 – user1141649

+0

@ user1141649:我也考虑到了这一点,但是你说你想要*生成*制表符,所以我认为将它保留在批处理脚本中会更接近你想要的。对于外部文件,您必须记住将它与批处理文件放在一起(我的意思是,如果您需要在某处部署脚本)。无论如何,你是对的,这也适用于外部文件。 –

+0

@ user1141649:糟糕,但请注意:如果文件包含*单个*制表符,则该行不起作用。您仍然需要添加更多字符,否则制表符将被截断。 –

0

感谢您的回答。

最后我用这种简单的方法:

FOR /f "delims=" %%x IN (delimiter.ini) DO set TAB=%%x 
1

:makeTab子例程创建在传递给它的变量的名称制表符,并将其存储。需要certutil,这是不是在的Windows XP的某些版本安装。 PS:想想吧,上面的子程序可以很容易的扩展到生成你想要的任何字符(除了NUL)之外。注意代码页问题,使用ASCII 128和ASCII 255之间的字符。

1

可以使用(或滥用?)不明确的forfiles命令来生成制表符(或除NUL以外的任何其他字符)在这DosTips topic讨论。

这是概括地说:

@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(22.1kb)感谢的化石副本奇妙Wayback Machine

1

随着ROBOCOPY TAB也可以生成。 Robocopy在默认情况下在Windows XP中不可用。

for /f "delims= " %%T in ('robocopy /L . . /njh /njs') do set "TAB=%%T" 
0

DosTips用户aGerman第一reported the presence of a tab charactershutdown /? 2011年的产量,并jeb精致the technique for extracting it去年五月,像这样:

@echo off & setLocal enableExtensions disableDelayedExpansion 

for /f "delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" %%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位的我的英文版本,但情况因人而异。

0

我已经保存最好的了! ;)

不情愿,因为我顶撞权威如jeb,他answer是5岁以上,并且技术已经被开发创建使用唯一的本地命令的制表符,其上的所有版本的WindowsXP起。

下面的:makeTab子例程是基于在DosTips的马拉松Create All ASCII Characters主题中开发的代码。它采用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

相关问题