[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已结】如何指定批處理參數分配到命令中的位置

1.我自己編寫了一個小工具(C語言的),它有一個功能是“向某offset寫入某數據”
比如 : hex 1.csv 16 FF ,其中hex是我寫的工具, 1.csv是目標文件 ,16是要
寫入的位置,也就是offset:0x10這個位置,FF是要寫入的數據

2.現在我需要一個批處理,通過批處理調用我寫的工具,實現向相對位置不變的
offset寫入數據
  1. C:\>hex 1.csv
  2. target file's size: 1323 byte
  3.                  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  4. --------------------------------------------------------------------
  5. offset:00000000  48 2c 32 30 30 38 30 31 30 31 2d 31 31 32 32 33   |
  6. offset:00000010  33 2c 53 43 5f 4e 59 55 4b 49 4e 5f 53 48 49 4d   |
  7. offset:00000020  45 5f 48 2c 31 30 2c 31 30 30 31 2c 31 30 30 31   |
  8. offset:00000030  2c 32 30 30 37 30 31 30 31 2d 31 31 32 32 33 33   |
  9. offset:00000040  0d 0a 44 2c 32 30 30 37 30 32 32 30 2c 31 30 30   |
  10. offset:00000050  30 30 2c 32 30 30 37 2d 30 32 2d 32 38 20 31 31   |
  11. offset:00000060  3a 32 32 3a 33 33 2e 33 34 35 2c 31 32 33 34 35   |
  12. offset:00000070  36 37 38 39 2c 31 2c 93 6f 98 5e 92 53 93 96 8e   |
  13. offset:00000080  d2 31 2c 32 30 30 38 2d 30 36 2d 30 31 20 30 39   |
  14. offset:00000090  3a 32 32 3a 33 32 2e 31 32 33 2c 8d 58 90 56 92   |
  15. offset:000000a0  53 93 96 8e d2 31 2c 32 30 30 38 2d 30 36 2d 31   |
  16. offset:000000b0  33 20 30 36 3a 33 34 3a 35 30 2e 37 38 39 2c 35   |
  17. offset:000000c0  30 30 2c 31 0d 0a 44 2c 32 30 30 37 30 37 30 38   |
  18. offset:000000d0  2c 32 30 30 30 30 2c 32 30 30 37 2d 30 31 2d 33   |
  19. offset:000000e0  30 20 30 33 3a 35 30 3a 31 32 2e 31 31 31 2c 32   |
  20. offset:000000f0  33 34 35 36 37 38 39 30 2c 32 2c 93 6f 98 5e 92   |
  21. offset:00000100  53 93 96 8e d2 32 2c 32 30 30 37 2d 31 30 2d 32   |
  22. offset:00000110  33 20 30 39 3a 32 32 3a 30 31 2e 32 32 32 2c 8d   |
  23. offset:00000120  58 90 56 92 53 93 96 8e d2 32 2c 32 30 30 38 2d   |
  24. offset:00000130  30 37 2d 31 35 20 30 35 3a 31 32 3a 33 33 2e 33   |
  25. offset:00000140  31 32 2c 36 30 30 2c 30 0d 0a 44 2c 32 30 30 37   |
  26. offset:00000150  31 30 31 32 2c 33 30 30 30 30 2c 32 30 30 36 2d   |
  27. offset:00000160  30 36 2d 30 35 20 32 30 3a 34 38 3a 35 36 2c 33   |
  28. 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就是我想寫的那些數據
這個批處理最後相當于我執行了這些操作:
  1. hex .exe targetfile 0 00
  2. hex .exe targetfile 16 10
  3. hex .exe targetfile 32 20
  4. .
  5. .
  6. .
  7. hex .exe targetfile  160 a0
复制代码
請問知道的朋友,如何實現這個批處理,謝謝了()

[ 本帖最后由 sniperhgy 于 2009-1-24 13:16 编辑 ]

謝謝朋友的熱心幫助  

TOP

%~1意思是对%1进行拓展,%~1会把%1中的双引号去掉
去掉双引号有好处的,set file="%~1"中给去掉再加上,以免多重引号和无引号出错
类似的还有%~z1(文件大小)等等

TOP

呵呵,寫那個c的時候,也是上網找了很多資料,問了一些高人,才寫出來的,批處理的話,正在看資料呢

PS:朋友給出的代碼裏面,爲何參數一寫成%~1呢?這是什麽意思啊?

[ 本帖最后由 sniperhgy 于 2009-1-24 13:13 编辑 ]

TOP

捏哦,其实也不算难吧,C都会了,批处理看看教程就能写出来吧。。。

TOP

謝謝朋友的回應

TOP

不能用逗号分隔,这样会看成多个参数。我写的用的是 - 分隔。
@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去掉就可以用了

TOP

哈哈,楼上要实现的效果很不错,用bat代替hex收集并处理参数再传递给hex中。。。
好想法,等我写会。。。

TOP

恩,代碼確實可用,謝謝朋友的幫助,不過,這是因爲我寫的那個例子有問題
如果我要寫的數據根本就沒有規律:1F,3B,BC,DE,7A,A7,6F,這樣的話,要怎
樣實現呢?
而且,退一步說,即便我就是要寫那些有規律的數據,朋友給的代碼也不算真正
合格阿,爲何有此一說呢,我在1樓寫的輸入方式是這樣的
xxx.bat targetfile 首地址 步長 用逗號分割的數據  請注意,裏面沒有給出終點的
位置,而終點的位置時要用首地址,步長,和參數的個數算出的,朋友給的代碼
直接都給寫死了,還有,最想學習的就是提取用逗號分割的字符串,所以朋友給的
代碼沒有真正達到要求

[ 本帖最后由 sniperhgy 于 2009-1-24 09:11 编辑 ]

TOP

@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去掉就可以用了

TOP

麻烦这位朋友写出代码,谢谢了

TOP

问题简单,被复杂化
先一个for /l %%a,步长为16,然后另一个变量每次都加1,当然你还要自己写,>=10的时候10、11等分别对应a、b等,然后hex.exe %%a %变量%0

TOP

返回列表