标题: 如何这样执行批处理代码?从txt和从粘贴板
[打印本页]
作者: loquat
时间: 2009-9-5 04:39
标题: 如何这样执行批处理代码?从txt和从粘贴板
1、从txt中执行一段cmd代码
因为我不少人保存在电脑里面的代码都是txt的
怎么在鼠标右键中添加一个“bat”或者“cmd”
点击这个选项就直接把这个txt当做bat文件来执行。。。
2、点击某一个文件,就直接执行粘贴板的命令。
以前经常看到非常批处理的伤脑筋这么玩。。。
作者: loquat
时间: 2009-9-5 11:37
哇,好多人进来了,都没有回答偶啊。是这个问题问得太菜了?
还是我没有表述明白?
作者: defanive
时间: 2009-9-5 12:58
第一个问题请参考注册表
HKEY_CLASSES_ROOT\txtfile\shell的部分
作者: tireless
时间: 2009-9-6 00:04
1、在“运行”对话框中运行:
reg add HKEY_CLASSES_ROOT\txtfile\shell\RunAsBat\command /ve /d "cmd /c copy \"%1\" \"%temp%\txt.bat\">nul & \"%temp%\txt.bat\"" /f
2、
nircmd.exe exec show "~$clipboard$"
作者: loquat
时间: 2009-9-6 10:15
感谢tireless
吼吼,一看nircmd.exe,好多好多强大的命令哦。。。
http://www.nirsoft.net/utils/nircmd.html
作者: loquat
时间: 2009-9-6 10:36
找到这么一个代码。。。
@echo off
:其中将剪贴板的文本保存为text.bat的作者为清风——地址:http://bbs.verybat.org/viewthread.php?tid=11762
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
::start /w notepad text.bat
start text.bat
不懂vbs,怎么弄成关闭text.bat时就删除本身???
作者: loquat
时间: 2009-9-6 10:41
del /f %0
这个怎么写到text.bat中去???
作者: loquat
时间: 2009-9-6 10:45
直接用del test.bat好像不行
在test里面添加一句也不行echo del /f %0 >> text.bat
再test里添加echo del text.bat >> text.bat还是不行。奇怪了。。。
[
Last edited by loquat on 2009-9-6 at 10:49 ]
作者: loquat
时间: 2009-9-6 11:08
还有一个vbs的,怎么去掉它的弹窗???并在bat执行完毕后删除临时文件???
Option Explicit
dim strClipb
dim objIE
Dim WshShell,oExec
Set objIE = CreateObject("htmlfile")
strClipb=objIE.parentWindow.clipboardData.getData("text")
WScript.Echo strClipb
CreateBat strClipb
If strClipb = "" Then
Set objIE =Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令'
Set WshShell = CreateObject("WScript.Shell")
'Set oExec= WshShell.Exec("%comspec% /k _tempbat.bat") '这句CMD不能自动关闭
WshShell.Run("%comspec% /c call _tempbat.bat"),1, false '执行BAT, "pause"执行后退出
Set objIE =Nothing
Set WshShell =Nothing
Sub CreateBat(strCopy) '创建BAT文件
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("_tempbat.bat", True)
MyFile.WriteLine strCopy &vbcrlf& "pause" '在所有代码后加回车及"pause"
MyFile.Close
Set fso =Nothing
Set MyFile =Nothing
End Sub
[
Last edited by loquat on 2009-9-6 at 11:10 ]
作者: loquat
时间: 2009-9-7 00:21
再顶一下,问题还没有完美解决。
希望有人再进来看一下。怎么删除临时文件。。。
作者: netbenton
时间: 2009-9-7 02:19
建一个bat.bat文件,内容如下:
@copy %1 %~n1.cmd 1>nul
@call %~n1.cmd
@del /q %~n1.cmd 1>nul
把要变为BAT执行的文件类型,在选择打开方式中指定始终用bat.bat程序打开
这样每次双击该类型的文件,就当成批处理文件运行了
作者: deason21
时间: 2009-9-7 09:31
到处看看
作者: loquat
时间: 2009-9-8 08:02
是一种方法,但是txt文件怎么能改成始终作为bat打开呢?
你能看看楼上那几个已经成功的代码吗?
如果能
删除临时文件就完美了。
作者: 523066680
时间: 2009-9-8 08:53
你说始终啊…… 关联成batfile
如果是看文本的话 右键-编辑
觉得不方便看文本的话,最多再改回去……
[
Last edited by 523066680 on 2009-9-8 at 08:57 ]
作者: loquat
时间: 2009-9-8 12:50
Quote: |
Originally posted by 523066680 at 2009-9-8 08:53:
你说始终啊…… 关联成batfile
如果是看文本的话 右键-编辑
觉得不方便看文本的话,最多再改回去……
[ Last edited by 523066680 on 2009-9-8 at 08:57 ] |
|
不是,上面tireless提供的那个代码。像现在这样我觉得是最好的了。。。
现在的问题是执行
剪贴板的bat代码那个。。。
上面我上面找到的代码都是vbs的,都要生成临时bat文件。怎么执行完后删除临时文件。vbs不懂。。。
作者: 523066680
时间: 2009-9-9 03:48
虽然我不会,我帮你顶起来。他们肯定知道。
作者: xiaofei120
时间: 2009-9-9 07:10
Quote: |
Originally posted by loquat at 2009-9-6 10:41:
del /f %0
这个怎么写到text.bat中去??? |
|
echo del /f %%0 >>test.bat 这样就可以了!
作者: 523066680
时间: 2009-9-9 07:58
这句话如果在批处理里面执行…… %0 可能就是 执行重定向的批处理的路径。
作者: loquat
时间: 2009-9-9 13:45
Quote: |
Originally posted by xiaofei120 at 2009-9-9 07:10:
echo del /f %%0 >>test.bat 这样就可以了! |
|
写进去没用。。。
@echo off
:其中将剪贴板的文本保存为text.bat的作者为清风——地址:http://bbs.verybat.org/viewthread.php?tid=11762
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
echo del /f %%0 >>text.bat
::start /w notepad text.bat
start text.bat
作者: loquat
时间: 2009-9-9 14:06
发现上面代码可行。
但是运行后无论怎么改都会在CMD中输出“找不到批处理文件。”
怎么去掉这个提示。
>nul 2>nul 加到哪个位置???
作者: loquat
时间: 2009-9-9 14:16
和伤脑筋的批处理还有一点点差距啊。
人家的没有这个错误提示。。。
[
Last edited by loquat on 2009-9-10 at 07:08 ]
作者: loquat
时间: 2009-9-10 23:30
没人进来看了,再顶起来。。。
作者: slore
时间: 2009-9-11 01:16
你没看到你CMD的标题麽。
cd切换路径
作者: loquat
时间: 2009-9-11 02:23
Quote: |
Originally posted by slore at 2009-9-11 01:16:
你没看到你CMD的标题麽。
cd切换路径 |
|
提示依旧,一下两种改法都是一样的提示。
@echo off
:其中将剪贴板的文本保存为text.bat的作者为清风——地址:http://bbs.verybat.org/viewthread.php?tid=11762
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
echo cd /d "%homepath%\桌面\" >>text.bat
echo del /f %%0 >>text.bat
::start /w notepad text.bat
start text.bat
@echo off
:其中将剪贴板的文本保存为text.bat的作者为清风——地址:http://bbs.verybat.org/viewthread.php?tid=11762
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
echo del %%0 >>text.bat
echo cd /d "%homepath%\桌面\" >>text.bat
::start /w notepad text.bat
start text.bat
现在的情况是start text.bat时,运行到del %0这一句的时候,能执行成功删除text.bat文件。
然后会返回一个提示"找不到批处理文件!"
能不能退出text.bat时才执行删除命令?
作者: loquat
时间: 2009-9-11 02:24
另外第一页那个vbs的代码有人会改吗???
作者: loquat
时间: 2009-9-11 02:44
这么改也还是有问题,我瞎了啊。。。
@echo off
:其中将剪贴板的文本保存为text.bat的作者为清风——地址:http://bbs.verybat.org/viewthread.php?tid=11762
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
echo cd /d %~dp0 >>text.bat
echo del %%0 >>text.bat
::start /w notepad text.bat
start text.bat
作者: loquat
时间: 2009-9-11 02:50
这样,怎么还有问题呢。。。
@echo off
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
::echo cd /d %~dp0 >>text.bat
::echo del %%0 >>text.bat
::start /w notepad text.bat
start text.bat
cd /d %~dp0
del text.bat >nul 2>nul
作者: loquat
时间: 2009-9-12 00:10
还是没人进来,一点点差别搞不定,汗,没人再进来了么?
start本身比call好用些,因为call之后就直接exit了,不能再继续输入命令执行。
http://bbs.verybat.org/viewthread.php?tid=19057
这边也发过帖了。。。
作者: slore
时间: 2009-9-12 04:28
标题: 就是2个点的问题。。。自己看下不就完了。
Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Set objIE
= CreateObject("
htmlfile"
)
strClipb
= objIE.parentWindow.clipboardData.getData
("
text"
)
'WScript.Echo strClipb
CreateBat strClipb
If strClipb
= ""
Then
Set objIE
= Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令
Set WshShell
= CreateObject("
WScript.Shell"
)
'Set oExec= WshShell.Exec("%comspec% /k _tempbat.bat") '这句CMD不能自动关闭
WshShell.Run
("
%comspec% /c call _tempbat.bat"
),1,
False '执行BAT, "pause"执行后退出
Set objIE
= Nothing
Set WshShell
= Nothing
Sub CreateBat
(strCopy
) '创建BAT文件
Dim fso, MyFile
Set fso
= CreateObject("
Scripting.FileSystemObject"
)
Set MyFile
= fso.CreateTextFile
("
_tempbat.bat",
True)
MyFile.WriteLine strCopy
'&vbcrlf& "pause" '在所有代码后加回车及"pause"
MyFile.
Close
Set fso
= Nothing
Set MyFile
= Nothing
End Sub
作者: loquat
时间: 2009-9-12 12:09
Quote: |
Originally posted by slore at 2009-9-12 04:28:
Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Set objIE = [col ... |
|
感谢老大进来看帖。
vbs我是完全不会,正在业余学习中。呵呵~~~
其实,单纯的批处理主帖的两种想法都实现了。
主要是bat命令用call之后,运行完不能继续手动输入命令再执行了。这一点不是我不喜欢,我只是好奇,多一种想法和探讨。。。start是否能完美删除临时bat文件而不留那个错误提示?
vbs里面还是用的call,并且没有删除临时文件的项目。vbs我就不会了,没法自己尝试完善了。。。
所以继续顶帖,盼高手出手吧。
作者: slore
时间: 2009-9-12 15:33
Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Dim TempBat
Set objIE
= CreateObject("
HtmlFile"
)
strClipb
= objIE.parentWindow.clipboardData.getData
("
text"
)
'WScript.Echo strClipb 这个可能测试时候写的,就是你说的弹窗,注释掉就完了。
If strClipb
= ""
Then
Set objIE
= Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令
Set WshShell
= CreateObject("
WScript.Shell"
)
CreateBat strClipb
'创建临时文件
WshShell.Run "
%comspec% /c """
& TempBat
& "
""",1,
True '等待脚本执行完毕
Dim objFSO
Set objFSO
= CreateObject("
Scripting.FileSystemObject"
)
objFSO.DeleteFile TempBat,
True '删除临时脚本
Set objFSO
= Nothing
Set objIE
= Nothing
Set WshShell
= Nothing
Sub CreateBat
(strCopy
) '创建BAT文件
Dim objFSO, MyFile
Set objFSO
= CreateObject("
Scripting.FileSystemObject"
)
TempBat
= objFSO.GetTempName
& "
.bat"
Set MyFile
= objFSO.CreateTextFile
(TempBat ,
True)
MyFile.Write strCopy
'将剪贴板内容写入临时文件
MyFile.
Close
Set objFSO
= Nothing
Set MyFile
= Nothing
End Sub
删除文件在执行之后做。而不是写到BAT里面执行。。。因为。。。如果在代码最下面写个
:XXX
XXX
XXX
上面调用这个XXX本不应该执行删除的,如果在最后追加del %0遇到带call 标签的bat就不通用了。
作者: loquat
时间: 2009-9-13 02:36
Quote: |
Originally posted by slore at 2009-9-12 15:33:
删除文件在执行之后做。而不是写到BAT里面执行。。。因为。。。如果在代码最下面写个
:XXX
XXX
XXX
上面调用这个XXX本不应该执行删除的,如果在最后追加del %0遇到带call 标签的bat就不通用了。 |
|
这段没太明白。
反正目前call的代码,这个可以完美执行临时bat文件,执行完后才删除
@echo off
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
call text.bat
pause >nul 2>nul
del text.bat
pause
我的意思是,难道start命令就不能做到执行完后再删除临时文件?
作者: loquat
时间: 2009-9-13 02:47
估计start要像call那样删除临时文件又不提示错误是不可能了。
start之后理解删除文件,可以执行成功,但是会提示错误。
但是像这样是没问题的。
1.bat
@echo off
echo cn-dos loquat
echo 将要删除本bat文件本身
pause >nul
del %0
为何,直接del %0就没问题,用echo 写出的bat,再用start调用打开就会有错误提示呢?
作者: loquat
时间: 2009-9-13 02:53
Quote: |
Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Dim TempBat
Set objIE = CreateObject("HtmlFile")
strClipb = objIE.parentWindow.clipboardData.getData("text")
'WScript.Echo strClipb 这个可能测试时候写的,就是你说的弹窗,注释掉就完了。
If strClipb = "" Then
Set objIE = Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令
Set WshShell = CreateObject("WScript.Shell")
CreateBat strClipb '创建临时文件
WshShell.Run "%comspec% /c """ & TempBat & """",1,True '等待脚本执行完毕
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile TempBat,True '删除临时脚本
Set objFSO = Nothing
Set objIE = Nothing
Set WshShell = Nothing
Sub CreateBat(strCopy) '创建BAT文件
Dim objFSO, MyFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
TempBat = objFSO.GetTempName & ".bat"
Set MyFile = objFSO.CreateTextFile(TempBat , True)
MyFile.Write strCopy '将剪贴板内容写入临时文件
MyFile.Close
Set objFSO = Nothing
Set MyFile = Nothing
End Sub |
|
你给的这部分,既然上面蓝色部分已经执行过bat了,下面红色部分的还有必要保存吗?
另外,
我还是觉得保留原来的那个pause比较好,因为现在的效果是屏幕一闪就没了。除非剪贴板最后有pause结尾。
还是希望有那种,执行完剪帖板了还能继续在里面手动输入命令的。
作者: loquat
时间: 2009-9-13 02:54
感谢楼上一直在帮我学习……
作者: slore
时间: 2009-9-13 03:52
标题: 遇到问题记得echo on……start也不会有错的。
@echo off
call :bugtest 1
call :bugtest 2
echo 你能看到我麽?
echo 我暂停了几次呢?
pause
exit
:bugtest
echo test bug %1
echo del %0 是文件麽?你要del?
rem 多加个pause结果如何呢?
pause
你自己测试最后3行带和不带的效果。。。。call不仅仅是调用bat而已。。。
你要暂停的话,调用就用/k不要用/C就行了。
红色的部分是过程CreateBat
代码中出现CreateBat的地方才执行这里。
蓝色执行完脚本就结束了。
CreateBat是在蓝色的部分之前调用的。