[問題] c return variable to batch(已解決)
Windows XP
這問題不知道有沒有人遇過..
假設要寫一功能之程式(批次檔)
為輸入 a b , 算 a+....+b
一般我們在寫 batch file 時,有類似 func-like 寫法如下
:: filename : sum.bat
@echo off
:sum
SETLOCAL ENABLEDELAYEDEXPANSION
SET low=%~1
SET up=%~2
SET rst=0
FOR /L %%I IN (%low%, 1, %up%) DO (
SET /A rst+=%%I
)
(ENDLOCAL
SET %3=%rst%
)
:: filename:main.bat
@echo off
:main
SET rst=0
call sum.bat 1 10 rst
echo 1+...+10=%rst%
pause > nul
這裡要問的是,如果 main.bat 裡面,sum.bat 改成 sum.exe 的話,
有沒有辦法完成?
我想破頭還是想不出來,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int i=0, rst=0;
for(i=atoi(argv[1]); i<=atoi(argv[2]); ++i)
rst+=i;
sprintf(argv[3], "%d", rst);
return 0;
}
我知道這樣一定會出包,而且很嚴重,
主要是想問,C language 有沒有辦法把結果傳進
batch 裡面之環境變數裡?
目前我是用 redirection 方式, 在 c 裡面會把結果 print 出來,
用 batch 調用時, sum.exe 1 10 > log.txt ,
到時再用 batch 讀 log.txt 便知結果 ,
想請教是不是只有這方法可行?或還有其他方法可得到類似效果?
( 用 C 寫 application 給 batch 調用)
謝謝各位不吝指導,感激不盡!
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
※ tropical72:轉錄至看板 Programming 09/15 19:10
※ tropical72:轉錄至看板 EZsoft 09/15 19:11
→
09/15 19:11, , 1F
09/15 19:11, 1F
→
09/15 19:28, , 2F
09/15 19:28, 2F
→
09/15 19:31, , 3F
09/15 19:31, 3F
→
09/15 19:35, , 4F
09/15 19:35, 4F
→
09/15 19:35, , 5F
09/15 19:35, 5F
→
09/15 19:37, , 6F
09/15 19:37, 6F
→
09/15 19:38, , 7F
09/15 19:38, 7F
→
09/15 19:38, , 8F
09/15 19:38, 8F
→
09/15 19:58, , 9F
09/15 19:58, 9F
推
09/15 20:20, , 10F
09/15 20:20, 10F
→
09/15 20:20, , 11F
09/15 20:20, 11F
嗯,動作洽好有點相反,一般是在 C language 呼叫 batch / command line,
但這隻 c 主要是寫給 batch file 使用,
基本上可以用 batch 做的當然用 batch 較方便,
不過 batch 設計整個死在沒有 array / floating,
再加上 batch 調用 recursive 的話整個慢到一個不行 (recur 可用 stack 也較小)
所以才想用 c 先包一些簡單的 library (math 應該是準備全包了) 出來,
給 batch 調用,補足 batch 先天不足。
當然如果搞下去很複雜的話,不排斥轉搞 vbs
推
09/15 20:38, , 12F
09/15 20:38, 12F
已修正,再補一下,用 putenv 失敗。
※ 編輯: tropical72 來自: 180.177.78.41 (09/15 20:39)
→
09/15 20:39, , 13F
09/15 20:39, 13F
→
09/15 20:50, , 14F
09/15 20:50, 14F
→
09/15 20:51, , 15F
09/15 20:51, 15F
→
09/15 20:55, , 16F
09/15 20:55, 16F
→
09/15 20:56, , 17F
09/15 20:56, 17F
→
09/15 20:57, , 18F
09/15 20:57, 18F
→
09/15 21:02, , 19F
09/15 21:02, 19F
→
09/15 21:34, , 20F
09/15 21:34, 20F
→
09/15 21:34, , 21F
09/15 21:34, 21F
→
09/15 21:47, , 22F
09/15 21:47, 22F
我似乎幹了傻事,或該拜拜了..
.c 用 printf 的確就行了,而 batch 從頭到尾的確都用 for 寫就行
@echo off
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=* delims=" %%A in ('sum_gcc.exe 1 10') DO (
SET myvar=%%A
echo !myvar!
)
ENDLOCAL
@echo off
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=* delims=" %%A in ('sum_vc.exe 1 10') DO (
SET myvar=%%A
echo !myvar!
)
ENDLOCAL
pause > nul
for 那段 firejox 的也沒錯 (EnableDelayedExpansion 必加就不說了)
一開始神奇的事情是,直接在 command line 輸入 sum_vc.exe 1 10
不會跑出結果 (抓這個抓了一個下午,最後才測到這個 XD)
後來用 gcc 試試卻可以跑。
重開機、重編譯後,現在一切正常了,現在還在想 vc 那段 bug 可能沒重現性了。
最後謝謝 firejox, priv , ericinttu 協助處理,感激不盡。
※ 編輯: tropical72 來自: 180.177.78.41 (09/15 22:34)
※ 編輯: tropical72 來自: 180.177.78.41 (09/15 22:41)
→
09/16 13:33, , 23F
09/16 13:33, 23F
→
09/16 13:33, , 24F
09/16 13:33, 24F
→
09/16 18:33, , 25F
09/16 18:33, 25F