@echo off
(for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (if /i "%%c"=="%1" (if %%b==%2 echo %%a))
echo EXIT
)|Sum.exe
我正在嘗試撰寫一個簡單的批處理腳本,該腳本將使用帶有資料列(Data.txt)的 .txt 檔案,使用“if”查找一些值并將所有找到的值重定向到“Sum.exe”的標準輸入。
“EXIT”也被重定向,因為這意味著沒有更多的輸入要給出。
當我運行上面的代碼時,首先在控制臺中列印出值,然后多次列印“行程試圖寫入不存在的管道”訊息錯誤。因此echo EXIT,必須以某種方式搞砸|Sum.exe。如何正確地將 for 和 echo Exit 重定向到 Sum?
編輯:
好的,這是 Sum 程式的輸入部分(用 C 撰寫)
std::string a;
while (a != "EXIT")
{
std::cin >> a;
if (isNumber(a))
add(sum, std::stoi(a));
}
我添加了 cout 以查看是否正在處理資料,并且批處理腳本中的命令似乎也被視為輸入。
uj5u.com熱心網友回復:
我的第一個建議是程序呼叫:call :PROCEDURE. 但是該呼叫不適用于管道重定向。例如call :PROCEDURE | SORT回傳錯誤:Invalid attempt to call batch label outside of batch script.
所以我建議使用輸入引數作為開關標志來呼叫自批處理。例如,它將是第三個引數:%3. Batch 在第三個引數等于時呼叫自身x。
所以我做了這個代碼
@echo off
if "%3"=="x" (%~nx0 %1 %2|sort )& GOTO :EOF
for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (
if /i "%%c"=="%1" (if %%b==%2 echo %%a)
echo EXIT
)
我在示例中使用sort.exe實用程式。將其更改為您的sum.exe
呼叫批處理檔案使用語法:my_batch.cmd [value11] [value5] x
PS我認為您不需要EXIT輸出中的單詞,但我將其留在示例代碼中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/451387.html
