2012-06-04 112 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

相關問題