doc命令

echo off 是關掉 命令行的 顯示信息的.
@是關閉 當前命令行的 顯示信息,如@dir d:,則不顯示dir這個命令.java

@echo off
就是結合起來用的,關掉命令行的顯示信息,同時也不顯示echo off這條命令的信息..工具

set PATH=C:\ProgramFiles\Java\jdk1.7.\bin;C:\WINDOWS;C:\WINDOWS\COMMAND
set classpath=.;C:\Program Files\Java\jdk1.7.0\lib\tools.jar;C:\Programui

%1 %2
@echo off
echo 當前盤符:%~d0
echo 當前盤符和路徑:%~dp0
echo 當前盤符和路徑的短文件名格式:%~sdp0
echo 當前批處理全路徑:%~f0
echo 當前CMD默認目錄:%cd%
pausespa

start  jre/bin/javaw -jar  excelToOracle.jar.net


%~dp  進行擴展,
d  向前擴展到驅動器,
p  日後擴展到路徑。命令行

%~0:取文件名(名+擴展名)
%~f0:取全路徑
%~d0:取驅動器名
%~p0:只取路徑(不包驅動器)excel

%~n0:只取文件名
%~x0:只取文件擴展名
%~s0:取縮寫全路徑名
%~a0:取文件屬性
%~t0:取文件建立時間
%~z0:取文件大小token


批處理中setlocal enabledelayedexpansion的做用詳細整理
變量延遲的啓動語句是「setlocalenabledelayedexpansion」,而且變量要用一對歎號「!!」括起來(注意要用英文的歎號)
set:設置
local:本地(環境變量)
enable:可以
delayed:延遲
expansion:擴展
setlocal enabledelayedexpansion就是擴展本地環境變量延遲,字符串


@echo off
setlocal enabledelayedexpansion
set k= 3
for /l %%i in (1,1,3) do (
set k=%%i
echo %k% %%i    ::echo !k! %%i
)get


%PATH:~10,5%
會擴展 PATH 環境變量,而後只使用在擴展結果中從第 11 個(偏
移量 10)字符開始的五個字符。若是沒有指定長度,則採用默認
值,即變量數值的餘數。若是兩個數字(偏移量和長度)都是負數,
使用的數字則是環境變量數值長度加上指定的偏移量或長度。

@echo off
setlocal EnableDelayedExpansion  
set a=%cd%
for %%b in ("%a%") do (
    set ok=%%~dpb
    echo %ok%
    echo !ok:~0,-1!
)
pause

 

在For命令語句的參數F中,最難理解的就是Delims和Tokens兩個選項,本文簡單的作一個比較和總結。
「For /f」經常使用來解析文本,讀取字符串。分工上,delims負責切分字符串,而tokens負責提取字符串。若是把字符串看成蛋糕,Delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面咱們用實例來進行理解。

    把如下內容保存爲文本文件「歌曲列表.txt」,注意擴展名爲「.txt」:
序號、歌手名-歌曲名.後綴名
一、饒天亮-玫瑰愛人.wma
二、高一首-我不肯錯過.mp3
三、黃凱芹-傷感的戀人.MP3
四、黃燦-黃玫瑰.lrc
五、黎姿-如此這般的愛情故事.mp3

代碼1:顯示所有內容
@echo off
for /f %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果:
序號、歌手名-歌曲名.後綴名
一、饒天亮-玫瑰愛人.wma
二、高一首-我不肯錯過.mp3
三、黃凱芹-傷感的戀人.MP3
四、黃燦-黃玫瑰.lrc
五、黎姿-如此這般的愛情故事.mp3

講解:
  若是不使用參數「/f」,運行結果只顯示括號裏的文字字符「歌曲列表.txt」,而不能讀取文本文件「歌曲列表.txt」中的內容。可見,「/f」是解析文本字符串的好工具。
1、delims
    假如只要序號,不要歌手名、歌曲名和後綴名,如何辦到?
代碼2:默認提取第一列
@echo off
for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果:
序號
1
2
3
4
5
講解:
    "delims=、"表示定義頓號「、」爲分隔符,並用該分隔符「、」切分文本字符串。字符串就是「歌曲列表.txt」裏的內容,也就是文件裏的文字和標點符號。
該頓號是原文中就有的。除了頓號「、」,原文中還有減號「-」和點號「.」,所以你也能夠用它們來作分隔符。

代碼3:用減號「-」作分隔符
@echo off
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果:
序號、歌手名
一、饒天亮
二、高一首
三、黃凱芹
四、黃燦
五、黎姿

講解:
    由於,當減號「-」被用作分隔符時,每行內容被減號「-」分隔成先後兩半,默認只顯示前半部分,然後半部分連同分隔符減號「-」都被忽略(省略)了。

代碼4:用點號「.」作分隔符
@echo off
for /f "delims=." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果:
序號、歌手名-歌曲名
一、饒天亮-玫瑰愛人
二、高一首-我不肯錯過
三、黃凱芹-傷感的戀人
四、黃燦-黃玫瑰
五、黎姿-如此這般的愛情故事

講解:
    默認狀況下,單純使用delims而不用tokens時,只顯示第一個分隔符前的內容,第一個分隔符和第一個分隔符後面的內容將被忽略。

代碼5:定義多個分隔符
@echo off
for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果:
序號
1
2
3
4
5

講解:
    緣由是,當定義頓號「、」、減號「-」和點號「.」三個標點符號爲分隔符後,原文被分隔成四個部分。
    如第二行「一、饒天亮-玫瑰愛人.wma」將被分隔成「1」、「饒天亮」、「玫瑰愛人」和「wma」 四個部分。
    從第一行到最後一行,每行的每一個部分對應下來至關於一個豎列。所以,原文就有「序號」、「歌手名」、「歌曲名」、「後綴名」四列。
    通常狀況下,只讀取第一列的內容。後面的內容須要用tokens選項提取。

2、tokens
    假如只要歌手名和歌曲名,不要序號和後綴名,如何辦到?
代碼6:提取單列
@echo off
for /f "tokens=2 delims=、." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運行結果將顯示:
歌手名-歌曲名
饒天亮-玫瑰愛人
高一首-我不肯錯過
黃凱芹-傷感的戀人
黃燦-黃玫瑰
黎姿-如此這般的愛情故事

講解:
用delims定義頓號「、」和點號「.」做爲分隔符,將原文分紅三部分。
如第六行「五、黎姿-如此這般的愛情故事.mp3」被分割成:
第一部分(第一列):5
第二部分(第二列):黎姿-如此這般的愛情故事
第三部分(第三列):mp3
「tokens=2」表示用tokens提取第二列的字符串,即「黎姿-如此這般的愛情故事」。
沒有被tokens定義提取的第一列和第三列將被忽略。

假如只要序號和歌曲名,而不要歌手名和後綴名,如何辦到?
代碼7:提取多列
@echo off
for /f "tokens=1,3 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j
pause>nul
運行結果將顯示:
序號 歌曲名
1  玫瑰愛人
2  我不肯錯過
3  傷感的戀人
4  黃玫瑰
5  如此這般的愛情故事

講解:
「delims=、-.」表示定義頓號、減號和點號爲分隔符。
「tokens=1,3」表示只提取第一列和第三列。
「%%i %%j」對應於「token」後面的列數。有多少列就要有多少個輸出變量,而且各變量中的字母存在前後順序。

如何只提取文字,不要標點符號?
代碼8:忽略分隔符
@echo off
for /f "tokens=1,2-4 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j %%k %%l
pause>nul
運行結果:
序號 歌手名 歌曲名 後綴名
1  饒天亮 玫瑰愛人 wma
2  高一首 我不肯錯過 mp3
3  黃凱芹 傷感的戀人 MP3
4  黃燦 黃玫瑰 lrc
5  黎姿 如此這般的愛情故事 mp3

講解:
默認狀況下,用作分隔符的標點符號將被忽略。
「tokens=1,2-4」中的「2-4」表示第二至第四列。

3、小結
「For /f」
一句話總結:解析文本,讀取字符串。
Delims的語法:
FOR /F "Delims=符號集"  %%I
IN (Command1) DO
Command2
一句話總結:忽略分隔符,切分字符串。
delims的意義包括兩個方面:
第1、指定原文中的標點符號做爲分隔符。使得文本被劃分爲許多小部分,方便使用批處理命令讀取和編輯。
第2、讀取第一個分隔符以前的內容。忽略第一個分隔符和分隔符後面的內容,如需讀取和編輯,須要使用tokens等命令。
    注意分隔符和標點符號的聯繫和區別。
    分隔符就是原文中的標點符號,能夠是一個標點符號也能夠是多個。但原文中的標點符號不必定是分隔符。
    分隔符須要定義,即用」delims=」來指定,等於號後面跟被用來作分隔符的標點符號,該標點符號來自原文。
    當有多個標點符號被定義爲分隔符時,標點符號之間沒有空格。當用空格作分隔符時,空格應該放在其它用做分隔符的標點符號以後。
    即便不使用delims,默認狀況下,批處理也將空格做爲分隔符。如文件名「Program Files」中含有空格時,批處理通常只讀取空格前的「Program」,剩下的「Files」被忽略了。
例:
代碼9:空格默認做爲分隔符
@echo off
for /f "delims=" %%a in ("偉大的中國人民萬歲 萬歲 萬萬歲") do echo %%a
pause>nul
運行結果:
偉大的中國人民萬歲 萬歲 萬萬歲
講解:
    「delims=」表明取消默認以空格做爲分隔符。
    批處理默認空格是分隔符,分隔符會隱藏第一個分隔符後面的全部內容。爲了顯示完整的信息,因此有必要取消該功能。
    所以,當文件名或路徑中含有空格時,須要用雙引號括住。若是不使用雙引號,括號內的內容將被當作文件名,若是文件名不存在,將提示「系統找不到……」。
若是不使用「delims=」,即便使用雙引號,也只能顯示第一個空格前面的字符串,後面的字符串將被默認忽略。

Tokens的語法:
FOR /F "tokens=x,y,m-n"  %%I   IN (Command1) DO Command2
一句話總結:提取列。
Tokens的意義就是,提取指定的列。
    注意列與句的聯繫與區別。
    文本內容由許多文字字符串組成,它們被標點符號分隔,兩個標點符號之間的語句咱們稱爲「句子」。
    當標點符號被「tokens=」指定爲分隔符以後,文字將被分紅多個部分。對應的每行的每一個部分咱們稱之爲「列」。
    一列多是一個句子,也可能包含多個句子,視delims定義的標點符號而定。

    其它方面:關於「行」的提取,前面作過一個很簡單的: @echo off findstr /n .* 12.txt>>122.txt set /p m=請輸入要定位的行: findstr   /b "%m%" 122.txt pause

相關文章
相關標籤/搜索