标题: [文件操作] 【已结】如何指定批處理參數分配到命令中的位置 [打印本页]
作者: sniperhgy 时间: 2009-1-23 15:03 标题: 【已结】如何指定批處理參數分配到命令中的位置
1.我自己編寫了一個小工具(C語言的),它有一個功能是“向某offset寫入某數據”
比如 : hex 1.csv 16 FF ,其中hex是我寫的工具, 1.csv是目標文件 ,16是要
寫入的位置,也就是offset:0x10這個位置,FF是要寫入的數據
2.現在我需要一個批處理,通過批處理調用我寫的工具,實現向相對位置不變的
offset寫入數據- C:\>hex 1.csv
- target file's size: 1323 byte
- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
- --------------------------------------------------------------------
- offset:00000000 48 2c 32 30 30 38 30 31 30 31 2d 31 31 32 32 33 |
- offset:00000010 33 2c 53 43 5f 4e 59 55 4b 49 4e 5f 53 48 49 4d |
- offset:00000020 45 5f 48 2c 31 30 2c 31 30 30 31 2c 31 30 30 31 |
- offset:00000030 2c 32 30 30 37 30 31 30 31 2d 31 31 32 32 33 33 |
- offset:00000040 0d 0a 44 2c 32 30 30 37 30 32 32 30 2c 31 30 30 |
- offset:00000050 30 30 2c 32 30 30 37 2d 30 32 2d 32 38 20 31 31 |
- offset:00000060 3a 32 32 3a 33 33 2e 33 34 35 2c 31 32 33 34 35 |
- offset:00000070 36 37 38 39 2c 31 2c 93 6f 98 5e 92 53 93 96 8e |
- offset:00000080 d2 31 2c 32 30 30 38 2d 30 36 2d 30 31 20 30 39 |
- offset:00000090 3a 32 32 3a 33 32 2e 31 32 33 2c 8d 58 90 56 92 |
- offset:000000a0 53 93 96 8e d2 31 2c 32 30 30 38 2d 30 36 2d 31 |
- offset:000000b0 33 20 30 36 3a 33 34 3a 35 30 2e 37 38 39 2c 35 |
- offset:000000c0 30 30 2c 31 0d 0a 44 2c 32 30 30 37 30 37 30 38 |
- offset:000000d0 2c 32 30 30 30 30 2c 32 30 30 37 2d 30 31 2d 33 |
- offset:000000e0 30 20 30 33 3a 35 30 3a 31 32 2e 31 31 31 2c 32 |
- offset:000000f0 33 34 35 36 37 38 39 30 2c 32 2c 93 6f 98 5e 92 |
- offset:00000100 53 93 96 8e d2 32 2c 32 30 30 37 2d 31 30 2d 32 |
- offset:00000110 33 20 30 39 3a 32 32 3a 30 31 2e 32 32 32 2c 8d |
- offset:00000120 58 90 56 92 53 93 96 8e d2 32 2c 32 30 30 38 2d |
- offset:00000130 30 37 2d 31 35 20 30 35 3a 31 32 3a 33 33 2e 33 |
- offset:00000140 31 32 2c 36 30 30 2c 30 0d 0a 44 2c 32 30 30 37 |
- offset:00000150 31 30 31 32 2c 33 30 30 30 30 2c 32 30 30 36 2d |
- offset:00000160 30 36 2d 30 35 20 32 30 3a 34 38 3a 35 36 2c 33 |
- offset:00000170 34 35 36 37 38 39 30 31 2c 33 2c 93 6f 98 5e 92 |
复制代码
比如我想向offset:00000000,offset:00000010,offset:00000020,……
offset000000a0,的位置分別寫入00,10,20,30,……,a0
現在分析一下,這些offset的相對位置,依次差0x10,所以我覺得用for
的/l規定初始位置和步長就可以搞定,但是接下來的參數分配就不會了
3.現在就是想要一個批處理,調用我寫的工具,然後批處理裡面這樣寫
xxx.bat targetfile 0 16 00,10,20,30,40,50,60,70,80,90,a0
targetfile就是目標文件,第一個零相當于起點,16相當于步長,00,10,20,
30,……,a0就是我想寫的那些數據
這個批處理最後相當于我執行了這些操作:- hex .exe targetfile 0 00
- hex .exe targetfile 16 10
- hex .exe targetfile 32 20
- .
- .
- .
- hex .exe targetfile 160 a0
复制代码
請問知道的朋友,如何實現這個批處理,謝謝了()
[ 本帖最后由 sniperhgy 于 2009-1-24 13:16 编辑 ]
作者: defanive 时间: 2009-1-23 16:12
问题简单,被复杂化
先一个for /l %%a,步长为16,然后另一个变量每次都加1,当然你还要自己写,>=10的时候10、11等分别对应a、b等,然后hex.exe %%a %变量%0
作者: sniperhgy 时间: 2009-1-23 20:31
麻烦这位朋友写出代码,谢谢了
作者: defanive 时间: 2009-1-23 20:45
@echo off
setlocal enabledelayedexpansion
set nt=-1
for /l %%a in (0,16,160) do (
set /a nt+=1
if !nt!==10 set nt=a
echo hex.exe targetfile %%a !nt!0
)
pause
把echo去掉就可以用了
作者: sniperhgy 时间: 2009-1-24 08:33
恩,代碼確實可用,謝謝朋友的幫助,不過,這是因爲我寫的那個例子有問題
如果我要寫的數據根本就沒有規律:1F,3B,BC,DE,7A,A7,6F,這樣的話,要怎
樣實現呢?
而且,退一步說,即便我就是要寫那些有規律的數據,朋友給的代碼也不算真正
合格阿,爲何有此一說呢,我在1樓寫的輸入方式是這樣的
xxx.bat targetfile 首地址 步長 用逗號分割的數據 請注意,裏面沒有給出終點的
位置,而終點的位置時要用首地址,步長,和參數的個數算出的,朋友給的代碼
直接都給寫死了,還有,最想學習的就是提取用逗號分割的字符串,所以朋友給的
代碼沒有真正達到要求
[ 本帖最后由 sniperhgy 于 2009-1-24 09:11 编辑 ]
作者: defanive 时间: 2009-1-24 12:04
哈哈,楼上要实现的效果很不错,用bat代替hex收集并处理参数再传递给hex中。。。
好想法,等我写会。。。
作者: defanive 时间: 2009-1-24 12:30
不能用逗号分隔,这样会看成多个参数。我写的用的是 - 分隔。
@echo off
setlocal enabledelayedexpansion
set file="%~1"
set start=%2
set step=%3
set "hexn=%4"
set "hexn=%hexn:-= %"
set /a ns=%start%-%step%
for %%a in (%hexn%) do (
set /a ns+=step
echo hex.exe %file% !ns! %%a
)
pause
把echo去掉就可以用了
作者: sniperhgy 时间: 2009-1-24 12:34
謝謝朋友的回應
作者: defanive 时间: 2009-1-24 12:48
捏哦,其实也不算难吧,C都会了,批处理看看教程就能写出来吧。。。
作者: sniperhgy 时间: 2009-1-24 13:05
呵呵,寫那個c的時候,也是上網找了很多資料,問了一些高人,才寫出來的,批處理的話,正在看資料呢
PS:朋友給出的代碼裏面,爲何參數一寫成%~1呢?這是什麽意思啊?
[ 本帖最后由 sniperhgy 于 2009-1-24 13:13 编辑 ]
作者: defanive 时间: 2009-1-24 13:14
%~1意思是对%1进行拓展,%~1会把%1中的双引号去掉
去掉双引号有好处的,set file="%~1"中给去掉再加上,以免多重引号和无引号出错
类似的还有%~z1(文件大小)等等
作者: sniperhgy 时间: 2009-1-24 13:16
謝謝朋友的熱心幫助
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |