中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-07 01:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]将文件拖动到BAT或VBS图标上以后自动修改脚本内容 查看 1,529 回复 13
楼 主 [已结]将文件拖动到BAT或VBS图标上以后自动修改脚本内容 发表于 2008-11-23 10:34 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
这个bat或者vbs该怎么写????


现有一个文本文件:bak.txt
内容如下:
>>"%Temp%.\Tmp.reg" ECHO "1"="aaa.exe"
>>"%Temp%.\Tmp.reg" ECHO "2"="bbb.exe"
>>"%Temp%.\Tmp.reg" ECHO "3"="ccc.exe"
>>"%Temp%.\Tmp.reg" ECHO "4"="ddd.exe"
>>"%Temp%.\Tmp.reg" ECHO "5"="eee.exe"
START /wait regedit /s "%Temp%.\Tmp.reg"


现在我想写这样一个bak.bat或者bak.vbs
现有一个fff.exe程序,
我直接把fff.exe拖动到bak.bat或者bak.vbs图标上,然后bak.txt变成如下:
>>"%Temp%.\Tmp.reg" ECHO "1"="aaa.exe"
>>"%Temp%.\Tmp.reg" ECHO "2"="bbb.exe"
>>"%Temp%.\Tmp.reg" ECHO "3"="ccc.exe"
>>"%Temp%.\Tmp.reg" ECHO "4"="ddd.exe"
>>"%Temp%.\Tmp.reg" ECHO "5"="eee.exe"
>>"%Temp%.\Tmp.reg" ECHO "6"="fff.exe"
START /wait regedit /s "%Temp%.\Tmp.reg"


可以继续拖动其它程序到bak.bat或者bak.vbs图标上,继续有序的添加

───────────────── 版务记录 ─────────────────
执行:HAT
操作:在帖子标题中增加搜索关键字;代码加code标签
说明:原标题"这个bat或者vbs该怎么写????"不利于论坛搜索
处罚:扣除2点积分
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{32667}那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-24 at 02:03 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT -2 2008-11-23 10:47
2 发表于 2008-11-23 12:18 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
谢谢HAT提醒,下次改正
3 发表于 2008-11-23 16:00 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
建议换一下方法。

拖入任意个数的文件到以下批处理上,每次拖入文件后,会修改 bak_行数.txt 的文件名中的行数数字,“行数”与 bak_行数.txt 文本中最后一行的行数对应,这样下次拖入文件时方便读取行数:
@echo off
if "%~1" equ "" echo 请拖入任意个数文件到此批处理上。按任意键退出...&pause>nul&exit /b

cd /d "%~dp0"
if not exist bak_*.txt type nul>bak_0.txt

for /f "delims=_. tokens=2" %%a in ('dir /a:-d /b bak_*.txt') do (
set n=%%a
set file=bak_%%a.txt
)

for %%a in (%*) do (
set /a n+=1
>>%file% call echo "%%n%%"="%%~a"
)

ren %file% bak_%n%.txt


如要把 bak_行数.txt 中的内容添加到 Tmp.reg 中,执行这条命令:
copy "%Temp%.\Tmp.reg"+bak_行数.txt


START /wait regedit /s "%Temp%.\Tmp.reg" 这一句另外来执行,加到文本中太费事了。
4 发表于 2008-11-23 22:51 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
谢谢LS的朋友

其实最初的问题是这样的:

原先的那个bak.txt本来就是个BAT文件,是我提问时故意改的

源文件如下(名称为: Restrict受限.bat ):
@cls&@echo.&@color f3&@cd..\&@cls
> "%Temp%.\Tmp.reg" ECHO Windows Registry Editor Version 5.00
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
>>"%Temp%.\Tmp.reg" ECHO "1"="regedit.exe"
>>"%Temp%.\Tmp.reg" ECHO "2"="regedt32.exe"
>>"%Temp%.\Tmp.reg" ECHO "3"="cmd.exe"
>>"%Temp%.\Tmp.reg" ECHO "4"="rundll32.exe"
>>"%Temp%.\Tmp.reg" ECHO "5"="smagent.exe"
>>"%Temp%.\Tmp.reg" ECHO "6"="shell32.dll"
>>"%Temp%.\Tmp.reg" ECHO "7"="msconfig.exe"
>>"%Temp%.\Tmp.reg" ECHO "8"="mspaint.exe"
>>"%Temp%.\Tmp.reg" ECHO "9"="shutdown.exe"
>>"%Temp%.\Tmp.reg" ECHO "10"="hh.exe"
>>"%Temp%.\Tmp.reg" ECHO "11"="IEXPLORE.EXE"
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
>>"%Temp%.\Tmp.reg" ECHO "RestrictRun"=dword:00000001
@START /wait regedit /s "%Temp%.\Tmp.reg"
@ping -n 2 127.0.0.1 > nul
@gpupdate.EXE /force > nul
@ping -n 2 127.0.0.1 > nul
@DEL "%Temp%.\Tmp.reg"


如果有个程序比如是OK.EXE拖进来到这个 Restrict受限.bat 里,或者tireless建的BAT文件中,则 Restrict受限.bat 内容变成如下:

@cls&@echo.&@color f3&@cd..\&@cls
> "%Temp%.\Tmp.reg" ECHO Windows Registry Editor Version 5.00
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
>>"%Temp%.\Tmp.reg" ECHO "1"="regedit.exe"
>>"%Temp%.\Tmp.reg" ECHO "2"="regedt32.exe"
>>"%Temp%.\Tmp.reg" ECHO "3"="cmd.exe"
>>"%Temp%.\Tmp.reg" ECHO "4"="rundll32.exe"
>>"%Temp%.\Tmp.reg" ECHO "5"="smagent.exe"
>>"%Temp%.\Tmp.reg" ECHO "6"="shell32.dll"
>>"%Temp%.\Tmp.reg" ECHO "7"="msconfig.exe"
>>"%Temp%.\Tmp.reg" ECHO "8"="mspaint.exe"
>>"%Temp%.\Tmp.reg" ECHO "9"="shutdown.exe"
>>"%Temp%.\Tmp.reg" ECHO "10"="hh.exe"
>>"%Temp%.\Tmp.reg" ECHO "11"="IEXPLORE.EXE"
>>"%Temp%.\Tmp.reg" ECHO "12"="OK.EXE"
>>"%Temp%.\Tmp.reg" ECHO.
>>"%Temp%.\Tmp.reg" ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
>>"%Temp%.\Tmp.reg" ECHO "RestrictRun"=dword:00000001
@START /wait regedit /s "%Temp%.\Tmp.reg"
@ping -n 2 127.0.0.1 > nul
@gpupdate.EXE /force > nul
@ping -n 2 127.0.0.1 > nul
@DEL "%Temp%.\Tmp.reg"

因为每次手工添加太麻烦,所以才萌生拖进来自动添加的念头
5 发表于 2008-11-23 22:57 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
因为小弟对BAT高级应用不是很懂,所以再请tireless兄,出手帮忙
6 发表于 2008-11-23 23:58 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
恩,非常感谢,最好能去掉路径
7 发表于 2008-11-24 00:05 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@echo off
if "%~1" neq "" goto add
more +23 %0>"%Temp%.\Tmp.reg"
START /wait regedit /s "%Temp%.\Tmp.reg"
ping -n 2 127.0.0.1 > nul
gpupdate.EXE /force > nul
ping -n 2 127.0.0.1 > nul
DEL "%Temp%.\Tmp.reg"
exit /b

:add
cd /d "%~dp0"
for /f "delims==" %%a in ('findstr ^^\".*\" %0^|sort /r') do (
set "n=%%~a" & goto next
)

:next
for %%a in (%*) do (
set /a n+=1
>>%0 call echo "%%n%%"="%%~a"
)
exit /b

Windows Registry Editor Version 5.00




注:

① 最后一行要为空行。

② 如果要在 Windows Registry Editor Version 5.00 前面增加或删除代码行,则要修改此句的红色数字:

more +23 %0>"%Temp%.\Tmp.reg"

这个数字就是 Windows Registry Editor Version 5.00 前面的行数。
8 发表于 2008-11-24 00:07 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
Originally posted by evilangell at 2008-11-23 11:58 PM:
恩,非常感谢,最好能去掉路径

哪个路径?
9 发表于 2008-11-24 00:12 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
谢谢朋友

经测试,发现如下问题:

1.我想去掉路径

2.只能添加到19个,再继续添加时,又变成了从第10个开始了
10 发表于 2008-11-24 00:14 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
@echo off
if "%~1" neq "" goto add
more +23 %0>"%Temp%.\Tmp.reg"
START /wait regedit /s "%Temp%.\Tmp.reg"
ping -n 2 127.0.0.1 > nul
gpupdate.EXE /force > nul
ping -n 2 127.0.0.1 > nul
DEL "%Temp%.\Tmp.reg"
exit /b

:add
cd /d "%~dp0"
for /f "delims==" %%a in ('findstr ^^\"[0-9].*\" %0^|sort /r') do (
set "n=%%~a" & goto next
)

:next
for %%a in (%*) do (
set /a n+=1
>>%0 call echo "%%n%%"="%%~a"
)
exit /b

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]
"1"="regedit.exe"
"2"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\AnyDel.bat"
"3"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\IP自动设置.lnk"
"4"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\NTFS文件锁定程序.bat"
11 发表于 2008-11-24 00:29 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
就是想把文件所在的路径去掉
12 发表于 2008-11-24 00:37 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
经多次测试,也不一定是19个,有时会出现两个一模一样的
如下:

"8"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\防盗版黑屏.bat"
"9"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\手工迁移个人资料.bat"
"10"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\文件(S).bat"
"11"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\regedit.exe"
"12"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\Restrict受限.jpg"
"10"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\AnyDel.bat"
"11"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\IP自动设置.lnk"
"12"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\NTFS文件锁定程序.bat"
"13"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\Restrict生效.bat"
"14"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\Restrict生效.exe"
"15"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\Restrict受限(安全版).bat"
"16"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\UnRestrict.bat"
"17"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\防盗版黑屏.bat"
"18"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\手工迁移个人资料.bat"
"19"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\文件(S).bat"
"20"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\regedit.exe"
"21"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\Restrict受限.jpg"
"10"="C:\Documents and Settings\Administrator\桌面\Restrict+BAT\AnyDel.bat"
13 改了一下,再试试: 发表于 2008-11-24 00:42 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@echo off
if "%~1" neq "" goto add
more +20 %0>"%Temp%.\Tmp.reg"
START /wait regedit /s "%Temp%.\Tmp.reg"
ping -n 2 127.0.0.1 > nul
gpupdate.EXE /force > nul
ping -n 2 127.0.0.1 > nul
DEL "%Temp%.\Tmp.reg"
exit /b

:add
cd /d "%~dp0"
for /f %%a in ('find /v /c "" %0') do set "n=%%~a-2"
for /f "delims==" %%a in ('more +%n% %0') do set n=%%~a
for %%a in (%*) do (
set /a n+=1
>>%0 call echo."%%n%%"="%%~nxa"
)
exit /b

Windows Registry Editor Version 5.00





[ Last edited by tireless on 2008-11-24 at 00:44 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT +2 2008-11-24 02:03
14 发表于 2008-11-24 00:49 ·  中国 浙江 宁波 电信
初级用户
积分 32
发帖 32
注册 2008-04-18 17:22
18年会员
UID 116262
性别 男
状态 离线
经测试,未发现问题,非常感谢朋友
论坛跳转: