我的批處理腳本有問題。我必須制作腳本來添加位于文本檔案中的數字。
數字在檔案的一行中,并用空格分隔。
我必須使用for回圈來做到這一點。
我做了這個:
setlocal EnableDelayedExpansion
set /a wynik=0
for /f "tokens=1* delims= " %%a in (liczby.txt) do (set /a wynik =%%a)
echo %wynik% > wynik.txt
輸出是:
C:\Users\NuClear\Desktop\arch\2>setlocal EnableDelayedExpansion
C:\Users\NuClear\Desktop\arch\2>set /a wynik=0
C:\Users\NuClear\Desktop\arch\2>for /F "tokens=1* delims= " %a in (liczby.txt) do (set /a wynik =%a )
C:\Users\NuClear\Desktop\arch\2>(set /a wynik =1 )
C:\Users\NuClear\Desktop\arch\2>echo 1 1>wynik.txt
我不知道為什么它不采取 next tokensafter 1。
uj5u.com熱心網友回復:
您沒有指定是必須用于for讀取檔案還是僅用于添加部分。
REM read the (first line of the) file into a variable:
<liczby.txt set /p "line="
REM or using a FOR /F to read the file:
REM for /f "delims=" %%a in (liczby.txt) do set "x=%%a"
REM add them up:
set "y=0"
for %%a in (%line%) do set /a y =%%a
echo Sum: %y%
for /fwithtokens非常有用,如果您事先知道有多少令牌。一個普通的for只是為每個令牌執行(使用標準分隔符),可能有多少。
uj5u.com熱心網友回復:
如果您想使用單個FOR命令執行此操作,這是另一種選擇。此選項的關鍵是CMD.exe與/U選項一起使用。
@echo off
set "wynik=0"
for /F "delims=" %%G in ('cmd /D /U /C type liczby.txt ^| find /V ""') do (
set /A "wynik =%%G" 2>nul
)
>wynik.txt echo %wynik%
uj5u.com熱心網友回復:
一個更簡單的方法:
@echo off
setlocal
set /P "line=" < liczby.txt
set /A "wynik=%line: = %"
> wynik.txt echo %wynik%
此方法假定“數字在檔案的一行中,每個數字用一個空格分隔”,行首或行尾沒有空格。
uj5u.com熱心網友回復:
在我看來,根據您提供的資訊,最簡單的想法是用加法運算子替換單個空格。
這是為您撰寫的示例 批處理檔案 標簽:
@(
For /F "UseBackQ Delims=" %%G In (
"liczby.txt"
) Do @(
Set "}=%%G"
For /F "Delims=" %%H In (
'%SystemRoot%\System32\cmd.exe /V /D /C "Set /A "!}: ^= !""'
) Do @Echo(%%H
)
) 1>"wynik.txt"
而對于你 指令 標簽:
(For /F "UseBackQ Delims=" %G in ("liczby.txt") Do @Set "}=%G" & For /F "Delims=" %H In ('%SystemRoot%\System32\cmd.exe /V /D /C "Set /A "!}: ^= !""') Do @Echo(%H) 1>"liczby.txt"
由于缺乏清晰度或示例,當前的回答可能以不同的方式解讀您的問題,因此我上面的回答假設liczby.txt看起來有點像這樣:
1 2 3 4 5
6 7 8 9
10 11 12
13 14
......結果wynik.txt看起來像這樣:
15
30
33
27
uj5u.com熱心網友回復:
我假設您有liczby.txt一個包含如下內容的文本檔案:
1 2 3
當您使用for /F回圈閱讀它時,將進行一次迭代,因為只有一行。在此迭代中,選項字串指定的所有標記都在相應的元變數中回傳。
但是你需要的是別的東西,你想遍歷各個數字,這可以使用標準for回圈來實作:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Initialise sum:
set /A "wynik=0"
rem // Read the input text file line by line:
for /F "usebackq tokens=*" %%J in ("liczby.txt") do (
rem // Loop through individual items/numbers:
for %%I in (%%J) do (
rem // Sum up the numbers:
set /A "wynik =%%I"
)
)
rem // Write sum into output file:
> "wynik.txt" echo(%wynik%
endlocal
exit /B
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/354379.html
