Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tabs 如何在CMD中创建%tab%_Tabs_Batch File_Cmd_Batch - Fatal编程技术网

Tabs 如何在CMD中创建%tab%

Tabs 如何在CMD中创建%tab%,tabs,batch-file,cmd,batch,Tabs,Batch File,Cmd,Batch,我需要可靠的方法为Windows和XP创建%tab%(包含一个制表符) SET TAB=" " 应适用于Windows 7(未测试),但不适用于Win XP(已测试) 这个 仅适用于Win XP。将制表符合并到批处理文件中。特别是,将其放在第一行的@ECHO OFF前面,然后使用SET/P命令读取第一行。当然,它将读取整行内容,因此还需要一个SET命令来从行中剪切制表符。下面是一个例子: @ECHO OFF <%0 SET /p tab= SET tab=%tab:~0,1% E

我需要可靠的方法为Windows和XP创建%tab%(包含一个制表符)

SET TAB=" "
应适用于Windows 7(未测试),但不适用于Win XP(已测试)

这个


仅适用于Win XP。

将制表符合并到批处理文件中。特别是,将其放在第一行的
@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关闭

您应该使用支持制表符而不将其更改为空格的编辑器。
您应该对引号重新排序,就像使用
set TAB=“”
一样,您得到了一个包含三个字符的变量。
选项卡还包含引号

set "TAB=   "
目前似乎没有可靠的方法使用程序在所有语言平台上的所有Windows版本中创建制表符

但您也可以使用嵌入式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));
谢谢你的回答

最后我使用了这个简单的方法:

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

下面的
:makeTab
子例程创建一个制表符,并将其存储在传递给它的变量的名称中。需要
certutil
,某些版本的Windows XP上未安装该软件

@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
:: requires certUtil
setLocal
set "tabFile=%tmp%\tab.tmp"

if not exist "%tabFile%" (
    >"%tabFile%" echo(09
    certUtil -decodeHex -f "%tabFile%" "%tabFile%" >nul
) %= if =%

for /f "useBack delims=" %%T in ("%tabFile%") do (
    endLocal & set "%1=%%T"
) %= for /f =%
exit /b 0 %= makeTab =%

PS:想想看,上面的子例程可以很容易地扩展以生成您想要的任何字符(NUL除外)。请注意ASCII 128和ASCII 255之间字符的代码页问题。

如本节所述,可以使用(或滥用)模糊的
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及更高版本上可用。但是振作起来,我的小兔子们!多亏了Wondous,您可以下载(22.1kb)的化石副本。

使用robocopy选项卡也可以生成。 默认情况下,Robocopy在windows xp中不可用

for /f "delims= " %%T in ('robocopy /L . . /njh /njs') do set "TAB=%%T"
2011年,用户aGerman在
shutdown/?
的输出中排名第一,并在去年5月进行了优化,如下所示:

@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上成功地测试了上述内容,但是ymmv。

我把最好的留到了最后!;)

尽管我不愿意反驳权威人士,例如,他已经5岁多了,此后开发了一种仅使用本机命令创建制表符的技术,该技术适用于XP以后的所有版本的Windows


下面的
:makeTab
子例程基于上的marathon主题中开发的代码。它使用
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 =%

只要知道所需字符的ASCII码,就可以轻松修改子例程以创建您喜欢的任何字符(NUL除外)。请注意ASCII 128和255之间的代码页问题。

此方法在Win2k、WinXP、Vista、Win7、Win8和Win10上的工作方式基本相同

它利用了一个事实,即由Microsoft编译器工具集生成的PE可执行映像的MZ头与近25年前的NT3.1时代保持不变,直到今天的Windows 10时代

MZ头的偏移量0x46处的字节值为0x09,这是制表符字符 因此,从windows中选择任何可执行文件并从中获取选项卡就足够了

最方便、最合理的选择是使用命令处理器本身的可执行文件

@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
要将制表符写入文件,请执行以下操作:

:: 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)。如果您只希望制表符没有新行,请使用提示技术,但请记住,与echo相比,此方法的速度非常慢,因此不要过度使用它

setlocal
set "prompt=%TAB%"
"%COMSPEC%" /d /k<nul>"TAB_Without_NewLine.txt"
endlocal
setlocal
设置“提示=%TAB%”
%COMSPEC%/d/k“不带换行符的选项卡”
端部

我的解决方案非常简单:

set TAB=    "
set "TAB=%TAB:"=%

echo one!TAB!two!TAB!three
一二三


reg query hkcu\environment/v temp提供临时目录的位置。这与你需要做什么有什么关系?
tab
变量应该包含什么?我需要生成供for循环使用的tab字符。该命令在Win XP上创建了一个制表符。这是一个好主意,但更简单的方法是创建一个包含一个制表符的新文件,并读取该文件。谢谢。@user1141649:我也想到了,但是你说你想生成制表符,所以我想把它保存在批处理脚本中会更接近你想要的。对于外部文件,您必须记住将其与批处理文件一起保存(我的意思是,如果您需要在某个地方部署脚本)。无论如何,您是对的,这同样适用于外部文件。@user1141649:Oops,但需要注意的是:如果文件的行中包含一个制表符,这将不起作用。您仍然需要添加更多字符,否则制表符将被截断。
:: 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"
setlocal
set "prompt=%TAB%"
"%COMSPEC%" /d /k<nul>"TAB_Without_NewLine.txt"
endlocal
set TAB=    "
set "TAB=%TAB:"=%

echo one!TAB!two!TAB!three