dos 批處理賦值
1樓:網友
在命令列輸入dir 得到碧緩羨的悔拍結果是檔名 不是變數。
命令哪陵行方式下輸入的是命令 輸出是命令結果。
和程式設計是不一樣的。
dos批處理下自動給環境變數賦值的問題
2樓:網友
1 使用者定義的變數稱之為環境變數不妥, 因為所設定的變數僅是在當前cmd視窗下有效,也並非定義某種環境。
2 應該說cmd提供給變數賦值僅乙個命令,那就是set
3 set 命令給變數賦值有三種基本形式,不加引數的和加 /p 及/a 其中,set/p 除了能接收鍵盤輸入值外,還提供了你所說的形式,把乙個檔案的第一行賦給變數, 而set/a 兼計算功能,將結果(數字型)賦給變數,且可一條命令(不用連線命令)給多個變數賦值。
4 按道理說用管道命令是可以代替使用者輸入的,正如你所說的實際上對set/p 不行,我只能這麼猜測, 命令無非是設計出來的程式,一般命令如遇執行過程中需要接收鍵盤輸入,設計者都考慮了可以接收管道傳入值代替,而這個set/p卻並沒有考慮它,以前dos的set命令並沒有/p功能,也許當初在"改造"它時疏忽,後來又覺得沒必要再去修改。總之實際不行是硬道理, 沒必要去追究為什麼。
5 我想很多人會有這種看法,要是可以把某命令的結果有個命令直接賦給變數就好了,遺憾的是沒有,好在有個for命令,經擴充套件功能後,確實「強大」得很,其中加/f 的可以把命令結果、檔案內容或多行的字串,逐行按需要擷取後直接進行處理或再利用set命令賦給某變數備用,提到它並不是說多了一種賦值方法,而是很多時候是在這個命令裡(還是利用set)賦值的。
3樓:網友
echo abcd|set /p a=
這樣有點多次一舉,下面這句能實現你的想法。
set a=abcd
dos批處理檔案中變數運算(set /a)的問題
4樓:網友
1、set/a "a=%1%%2"
2、當%1為0時,%2只能是0~8,若不是將出錯。。當%1和%2都是字母或者%1為字母時,a都為0。。所以不要用set/a用set
3、不存在%1%這樣的變數,無意義。。若變數名不以數字開頭且只含乙個字元,請參考情況2。。。
5樓:網友
你之所以糾結,是因為你自身寫法有問題。
1.形參%1除以2取餘數 (傳遞了引數1,但沒有傳遞引數2時,實現)2.形參%1後跟形參%2 (傳遞引數,set a=%1%2,實現)
3.環境變數%1%後跟數字2 (不傳遞引數,給變數1賦值,set a=%1%2,實現)
批處理本身的語法就很混亂,你再在寫法上模凌兩可。
dos 批處理 將乙個以空格為分隔符的字串中特定格式的字串取出並賦值給變數
6樓:網友
應該把完整需求說出來的,不然就此寫的你未必會進一步改要寫到批處理中:
echo off
set str=6s7ew89 李四 56ee789set/a n=0
for %%i in (%str%)do echo;%%i>temdel tem
rem 已把含數字部分儲存到陣列變數s1-sn 了,例如可以用下面**顯示,其實這個步驟沒必要,只需在上一步的for裡的%%j 就是需要的變數,該作什麼從那就可以做了:
setlocal enabledelayedexpansionif %n% gtr 0 for /l %%i in (1,1,%n%)do echo !s%%i!
pause
bat 執行 結果賦值給
7樓:網友
比如執行echo %time% 得到的顯示時間為 即18點57分44秒10毫秒;
time:~0,2% 是提取%time%中的前兩個字元,即小時值;
time:~3,2% 是從%time%中的第三個字元後開始提取兩個字元,即分鐘值;
time:~6,2% 是從%time%中的第六個字元後開始提取兩個字元,即秒數值;
字元提取問題可以檢視set/?命令;
舉個例子吧!
set str=mynameisluhonglein
echo %str:~2,4% //提取str中第二個字元後的四個字元,即顯示 name
echo %str:~-10% //顯示str中最後十個字元,即 luhonglein
echo %str:~2,-10% //從第二個字元後開始提取,但去除最後的十個字元,將顯示 nameis
dos批處理變數內容替換的問題
8樓:網友
兩個問題都沒有簡單命令可解決,只能是適當「程式設計」。
第1個,確實變數的取捨替換裡,查詢時是不分大小寫的。如果能確定要替換的字串不是大寫的和小寫的都同時存在,那麼可以先用find或findstr查詢一下,比如只換小寫的。
echo %a%|find "good">nul&&set b=%a:good=best%
如果不能確定,那就比較麻煩了,但用批處理總還是可以解決的,如果你想不到解決辦法可再hi我。
第2個 稍有轉折,不難解決:比如整串你能取得後半串,那麼要前半串,從整串裡去掉後半串就得到前半串了,這裡面只是有乙個問題,就是變數裡想去掉另一變數代表的部分,如果寫成類似:
set c=%a:%b%=% 是不行的,要麼先設定變數延遲擴充套件setlocal enabledelayedexpansion
然後外側的%符換成! 即類似 set c=!a:%b%=!
還可以不設定變數延遲擴充套件,用時外側的%符寫成雙的再多加個call 類似:call set c=%%a:%b%=%%
9樓:漆海冬
a 命令列開關指定等號右邊的字串為被評估的數字表示式。該表示式。
評估器很簡單並以遞減的優先權順序支援下列操作:
分組。 一元運算子。
算數運算子。
算數運算子。
邏輯移位。按位「與」 按位「異」
按位「或」 /= %= += -= - 賦值。
表示式分隔符。
如果您使用任何邏輯或取餘操作符, 您需要將表示式字串用。
引號擴起來。在表示式中的任何非數字字串鍵作為環境變數。
名稱,這些環境變數名稱的值已在使用前轉換成數字。如果指定。
了乙個環境變數名稱,但未在當前環境中定義,那麼值將被定為。
零。這使您可以使用環境變數值做計算而不用鍵入那些 % 符號。
來得到它們的值。如果 set /a 在命令指令碼外的命令列執行的,那麼它顯示該表示式的最後值。該分配的操作符在分配的操作符。
左邊需要乙個環境變數名稱。除十六進位有 0x 字首, 八進位。
有 0 字首的,數字值為十進位數字。因此, 0x12 與 18 和 022
相同。請注意八進位公式可能很容易搞混: 08 和 09 是無效的數字,因為 8 和 9 不是有效的八進位位數。
p 命令列開關允許將變數數值設成使用者輸入的一行輸入。讀取輸入。
行之前,顯示指定的 可以是空的。
環境變數替換已如下增強:
path:str1=str2%
會擴充套件 path 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。
要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。
str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的。
開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。
也可以為副檔名指定子字串。
path:~10,5%
會擴充套件 path 環境變數,然後只使用在擴充套件結果中從第 11 個(偏。
移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設。
值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數,使用的數字則是環境變數數值長度加上指定的偏移量或長度。
path:~-10%
會提取 path 變數的最後十個字元。
path:~0,-2%
會提取 path 變數的所有字元,除了最後兩個。
終於新增了延遲環境變數擴充的支援。該支援總是按預設值被。
停用,但也可以通過 的 /v 命令列開關而被啟用/停用。
10樓:網友
1. set進行字串擷取是不分大小寫的。2樓的方法正解。
echo %a%|find "good">nul&&set b=%a:good=best%
2. set進行字串擷取同樣也不支援正則。可以用批處理變通處理。
set b=%a:good=☆%
for /f "tokens=1* delims=☆「 i in ('echo %a%') do set b=%%j
set b=%b:☆=good%
11樓:網友
命令列開關允許將變數數值設成使用者輸入的一行輸入。讀取輸入行之前,顯示指定的 可以是空的。 環境變數替換已如下增強: %path:str
批處理提取檔案修改時間賦值給變數
for a in do set aa ta set yyy copyaa 0,4 baiaa 5,2 aa 8,2 if not exist yyy md yyy set aa ta 最後的一個百du分zhi號是多餘的,去dao掉這個百分號就不會為空了 批處理獲取了檔案的修改時間,怎麼賦值給變數 e...
如何使得dos批處理命令echo不輸出回車
用set p 顯示的內容 批處理檔案中,如何才能實現不換行輸出?echo off echo 故障警告 故障開始 怎麼在批處理中加回車命令 這需要看到批處理的源 通常是去掉 中的pause命令 如果確實是某些命令需要按回車 一般都會有不需要按回車的靜默選項 對於個別需要回車確認的特別命令 可以考慮在這...
請教DOS批處理問題,如何條件選擇性的執行命令
echo off title.color 0a clsecho echo 我想做一個選擇性的執行命令的批處理echo echo 命令1 ipcomfig echo 命令2 ping 127.0.0.1echo set a set p a 選擇命令1或2 按回車確定 if a 1 ipconfigif...