我需要可靠的方式爲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。
我需要可靠的方式爲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。
您應該使用支持製表符的編輯器,而不必將其更改爲空格。
你應該重新排列報價,與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));
將製表符合併到批處理文件中。特別是將它放在第一行,在@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
的空間應該是一個製表符,就像我剛纔說。
這是個好主意,但更簡單的應該是創建一個帶有一個選項卡的新文件,並閱讀此文件。謝謝。 – user1141649
@ user1141649:我也考慮到了這一點,但是你說你想要*生成*製表符,所以我認爲將它保留在批處理腳本中會更接近你想要的。對於外部文件,您必須記住將它與批處理文件放在一起(我的意思是,如果您需要在某處部署腳本)。無論如何,你是對的,這也適用於外部文件。 –
@ user1141649:糟糕,但請注意:如果文件包含*單個*製表符,則該行不起作用。您仍然需要添加更多字符,否則製表符將被截斷。 –
感謝您的回答。
最後我用這種簡單的方法:
FOR /f "delims=" %%x IN (delimiter.ini) DO set TAB=%%x
下:makeTab
子例程創建在傳遞給它的變量的名稱制表符,並將其存儲。需要certutil
,這是不是在的Windows XP的某些版本安裝。 PS:想想吧,上面的子程序可以很容易的擴展到生成你想要的任何字符(除了NUL)之外。注意代碼頁問題,使用ASCII 128和ASCII 255之間的字符。
可以使用(或濫用?)不明確的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。
隨着ROBOCOPY TAB也可以生成。 Robocopy在默認情況下在Windows XP中不可用。
for /f "delims= " %%T in ('robocopy /L . . /njh /njs') do set "TAB=%%T"
DosTips用戶aGerman第一reported the presence of a tab character從shutdown /?
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位的我的英文版本,但情況因人而異。
我已經保存最好的了! ;)
不情願,因爲我頂撞權威如jeb,他answer是5歲以上,並且技術已經被開發創建使用唯一的本地batch命令的製表符,其上的所有版本的Windows從XP起。
下面的: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
REG查詢HKCU \環境/ V溫度之間的代碼頁問題當心讓你的Temp目錄的位置。這與你需要做什麼有關? 'tab'變量應該包含什麼? –
我需要生成供循環使用的製表符。該命令在Win XP上創建了一個製表符。 – user1141649