Batch file 如何修复此批处理文件?(打字机效果)

Batch file 如何修复此批处理文件?(打字机效果),batch-file,error-handling,effect,Batch File,Error Handling,Effect,我想让一个批处理脚本在删除文件和显示回音等内容时具有打字机风格/效果。我希望它看起来像这样,例如: :Write1 echo Deleting Prefetches... del /s /q "C:\Windows\Prefetch\JAVAW*.pf" echo Prefetches Deleted. pause && goto :Write2 (Then Write2 would delete stuff, display messages and go to Write3

我想让一个批处理脚本在删除文件和显示回音等内容时具有打字机风格/效果。我希望它看起来像这样,例如:

:Write1
echo Deleting Prefetches...
del /s /q "C:\Windows\Prefetch\JAVAW*.pf"
echo Prefetches Deleted.
pause && goto :Write2
(Then Write2 would delete stuff, display messages and go to Write3 and so on.
这不是我实现的代码,但非常相似。 我有这段代码(很长),我想知道是否有人可以错误修补它,或者只是找出它有什么问题,因为它会重复自己,不会在暂停后继续。到目前为止,我所拥有的是:(注意,它删除的文件不是系统文件,而是没有任何作用的快捷方式和注册表项。请清理以进行测试。)


您不需要调用相同的函数
:Write1:write2:write3:write3..
等等

您只需要一个函数
打字机
就可以随心所欲地调用它,因此,只需调用它就可以节省大量代码,如以下代码:

@echo关闭
打字机标题示例
颜色0A
延迟扩展
电话:打字机“http://stackoverflow.com/questions/40011157/how-do-i-fix-this-batch-file-typewriter-effect"
暂停并转到下一步(&G)
::************************************************
:打字机
设置字符串=%1
调用:GetLength%string%
设置字符串=%string:=%
设置/a长度=%len\uux%
对于(1,1,%length%)中的/l%%A,请执行以下操作(
cls
echo!字符串:~0,%%A!
ping localhost-n1-w500-l5000>nul
)
::************************************************
:GetLength
设置str=%1
设置/a透镜=1
::************************************************
:循环
设置/a长度=%len%1
如果“!str:~0,%len%!"=="!str:~0%,len_uu%!“好了
设置/a透镜+=1
转到环路
::************************************************
:完成
设置/a长度=2
后藤:eof
::************************************************
:下一个
颜色0C
呼叫:打字机“删除回收物品…”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\*.lnk“
echo del/s/q“C:\$RECYCLE.BIN\*.lnk”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\*.pf“
echo del/s/q“C:\$RECYCLE.BIN\*.pf”
呼叫:打字机“echo rd/s/q”C:\$RECYCLE.BIN\Rar$EXa0.***
echo rd/s/q“C:\$RECYCLE.BIN\Rar$EXa0.*.”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\Rar$EXa0.*.*
echo del/s/q“C:\$RECYCLE.BIN\Rar$EXa0.*.”
呼叫:打字机“echo rd/s/q”C:\$RECYCLE.BIN\Rar$DIa0.**
echo rd/s/q“C:\$RECYCLE.BIN\Rar$DIa0.*.”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\Rar$D.*“Ia0”
echo del/s/q“C:\$RECYCLE.BIN\Rar$D.*.*”Ia0
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\etilqs\uq*“”
echo del/s/q“C:\$RECYCLE.BIN\etilqs\uqs*”
回音回收项目删除!
暂停
::************************************************
于2016年10月13日22:05编辑

另一个例子:

@echo关闭
电话:打字机“http://stackoverflow.com/questions/40011157/how-do-i-fix-this-batch-file-typewriter-effect"
暂停并转到下一步(&G)
::*************************************************************
:打字机
回音(
(
echo strText=wscript.arguments(0^)
echo intTextLen=Len(strText^)
回声暂停=150
x=1到intTextLen的回声
echo stremptext=Mid(strext,x,1^)
echo WScript.StdOut.Write stremptext
echo WScript.Sleep intPause
下一个回声
)>%tmp%\%~n0.vbs
@cscript.EXE/noLogo“%tmp%\%~n0.vbs”“%~1”
回音(
退出/b
::**************************************************************
:下一个
颜色0C
呼叫:打字机“删除回收物品…”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\*.lnk“
echo del/s/q“C:\$RECYCLE.BIN\*.lnk”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\*.pf“
echo del/s/q“C:\$RECYCLE.BIN\*.pf”
呼叫:打字机“echo rd/s/q”C:\$RECYCLE.BIN\Rar$EXa0.***
echo rd/s/q“C:\$RECYCLE.BIN\Rar$EXa0.*.”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\Rar$EXa0.*.*
echo del/s/q“C:\$RECYCLE.BIN\Rar$EXa0.*.”
呼叫:打字机“echo rd/s/q”C:\$RECYCLE.BIN\Rar$DIa0.**
echo rd/s/q“C:\$RECYCLE.BIN\Rar$DIa0.*.”
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\Rar$D.*“Ia0”
echo del/s/q“C:\$RECYCLE.BIN\Rar$D.*.*”Ia0
呼叫:打字机“echo del/s/q”C:\$RECYCLE.BIN\etilqs\uq*“”
echo del/s/q“C:\$RECYCLE.BIN\etilqs\uqs*”
回音回收项目删除!
暂停>nul
::************************************************

调用“函数”时"将
goto:eof
放在函数的末尾,使其向后跳转。我想您面临的问题是,您
调用:Write
,然后它会进一步调用
:Write 2、3、4等
此外,如果我没有弄错的话,
Write
-函数都是一样的……您只需调用它就可以节省大量代码
:一遍又一遍地写
。下一件事:你有一次试图写一个不存在的
Goto:Write5
。我看到的最后一件事是:在暂停后使用
Goto:Write
时,它会再次检查所有函数,然后应该停止->之后不再返回->它会疯狂地闪烁,我希望它都在sa中给我一组没有清理的线。有什么办法让它更快吗?对我来说似乎很慢。
@echo off
:: %len_% holds the value of the length of the string input

setlocal enabledelayedexpansion
call :Write "Deleting Prefetches..."
del /s /q "C:\Windows\Prefetch\VAPE*.pf"
del /s /q "C:\Windows\Prefetch\JAVAW*.pf"
echo Prefetches Deleted!
pause && goto :Write2

setlocal enabledelayedexpansion
call :Write2 "Deleting Shellbags..."
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell /va /f
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags /va /f
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\BagMRU /va /f
reg delete HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU /VA /F
reg delete HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths /VA /F
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU /va /f
echo Shellbags Deleted!
pause && goto :Write3

setlocal enabledelayedexpansion
call :Write3 "Deleting Temp Files..."
for /d %%i in ("%TEMP%\Rar$EXa0.???") do rd "%TEMP%\%%i"
for /d %%i in ("%TEMP%\Rar$DIa0.???") do rd "%TEMP%\%%i"
rd /s /q "C:\Users\%USERNAME%\AppData\Local\Temp\Rar$EXa0.*.*"
del /s /q "C:\Users\%USERNAME%\AppData\Local\Temp\Rar$EXa0.*.*"
attrib -H "C:\Users\%USERNAME%\AppData\Local\Temp\etilqs_*.*"
del /s /q "C:\Users\%USERNAME%\AppData\Local\Temp\etilqs_*.*"
echo Temp Files Deleted!
pause && goto :Write4

setlocal enabledelayedexpansion
call :Write4 "Deleting Recent Items..."
del /s /q "?C:\Users\%USERNAME%\Recent\SDHC (E) (2).lnk"
del /s /q "?C:\Users\%USERNAME%\Recent\SDHC (E).lnk"
del /s /q "C:\Users\%USERNAME%\Recent\*.ahk.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\1.7.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\1.8.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.exe.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape.jar.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\.vs.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Common.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Jar Injector.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.sln.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\v14.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\.suo.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Memory.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Memory.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\include.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jdk.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\win32.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\classfile_constants.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jawt.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jdwpTransport.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jni.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jvmti.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jvmticmlr.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\bridge.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jawt_md.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\jni_md.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\AccessBridgeCallbacks.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\AccessBridgeCalls.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\AccessBridgeCalls.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\AccessBridgePackages.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\DllMain.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Jar Injector.vcxproj.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Jar Injector.vcxproj.filters.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Jar Injector.vcxproj.user.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\ReflectiveDLLInjection.h"
del /s /q "C:\Users\%USERNAME%\Recent\ReflectiveLoader.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\ReflectiveLoader.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\GetProcAddressR.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\GetProcAddressR.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\LoadLibraryR.c.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\LoadLibraryR.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\ReflectiveDLLInjection.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\resource.h.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.rc.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.vcxproj.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.vcxproj.filters.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\Vape Launcher.vcxproj.user.lnk"
del /s /q "C:\Users\%USERNAME%\Recent\WinMain.c.lnk"
echo Recent Items Deleted!
pause && goto :Write5

setlocal enabledelayedexpansion
call :Write5 "Deleting Recycled Items..."
del /s /q "C:\$RECYCLE.BIN\*.lnk"
del /s /q "C:\$RECYCLE.BIN\*.pf"
rd /s /q "C:\$RECYCLE.BIN\Rar$EXa0.*.*"
del /s /q "C:\$RECYCLE.BIN\Rar$EXa0.*.*"
rd /s /q "C:\$RECYCLE.BIN\Rar$DIa0.*.*"
del /s /q "C:\$RECYCLE.BIN\Rar$DIa0.*.*"
del /s /q "C:\$RECYCLE.BIN\etilqs_*.*"
echo Recycled Items Deleted!
pause && goto :eof

:Write
set string=%1
call :GetLength %string%
set string=%string:"=%
set /a length=%len_%
for /l %%A in (1,1,%length%) do (
cls
echo !string:~0,%%A!
ping localhost -n 1 -w 500 -l 5000 > nul
)

:Write2
set string=%1
call :GetLength %string%
set string=%string:"=%
set /a length=%len_%
for /l %%A in (1,1,%length%) do (
cls
echo !string:~0,%%A!
ping localhost -n 1 -w 500 -l 5000 > nul
)

:Write3
set string=%1
call :GetLength %string%
set string=%string:"=%
set /a length=%len_%
for /l %%A in (1,1,%length%) do (
cls
echo !string:~0,%%A!
ping localhost -n 1 -w 500 -l 5000 > nul
)

:Write4
set string=%1
call :GetLength %string%
set string=%string:"=%
set /a length=%len_%
for /l %%A in (1,1,%length%) do (
cls
echo !string:~0,%%A!
ping localhost -n 1 -w 500 -l 5000 > nul
)

goto :eof

:GetLength
set str=%1
set /a len=1
:loop
set /a len_=%len% - 1
if "!str:~0,%len%!"=="!str:~0,%len_%!" goto done
set /a len+=1
goto loop

:done
set /a len_-=2
goto :eof