标题: [转]不需要choice.exe和回车就能获得按键输入的方法/黑科技 [打印本页]
作者: 523066680 时间: 2016-9-6 23:56 标题: [转]不需要choice.exe和回车就能获得按键输入的方法/黑科技
本帖最后由 523066680 于 2016-9-7 08:34 编辑
- @echo off
-
- :get_key
- set "key="
- for /f "delims=" %%a in ('xcopy /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
- set "key=%key:~-1%"
- echo %key%
-
- pause
复制代码
不知道以前有没有人发过?明天再注明出处 :b
===================引用自===================
一个批处理版本的2048游戏
https://rosettacode.org/wiki/2048#Batch_File
作者: aa77dd@163.com 时间: 2016-9-7 06:18
本帖最后由 aa77dd@163.com 于 2016-9-7 06:49 编辑
这个方式好象能支持比 choice 更多的字符, 比如 , . / Tab 字符, 甚至组合键 Ctrl+A Ctrl+Q 等
另外, 我把参数稍改了下, 在 win7 64 位仍能行- xcopy /w . . 2^>NUL
- 或者
- xcopy /w \ \ 2^>NUL
复制代码
我能找到的最早出处
February 07, 2013, 03:07:23 AM
jeb @ www.computerhope.com
http://www.computerhope.com/forum/index.php/topic,135713.msg872140.html?PHPSESSID=70a491e69021f3e926539660fee754b9#msg872140
随后, jeb 又在 stackoverflow 和 groups.google.com/forum 都发表过此代码应用例
http://stackoverflow.com/questio ... r/15160168#15160168
https://groups.google.com/forum/ ... atch.nt/hpNOPhNfwtI
我找到的时间最早的示例代码- @echo off
- setlocal EnableDelayedExpansion
- if "%~1"==":::" goto :spinnerThread
-
- :menuLoop
- <nul set /p menu=Select menu[1 or 2]=
- call :GetKey
- echo(
- echo Pressed '!key!'
- if !key!==1 call :menu1
- if !key!==2 call :menu2
- if !key!==2 call :menu2
- goto :menuLoop
-
- :menu1
- :menu2
- call :spinnerStart
- rem do some work
- ping localhost -n 3 > nl
- call :spinnerStop
- echo Finished
- exit /b
-
- :spinnerStart
- del spinnerStop.tmp > nul 2>&1
- start /b "" cmd /c "%~df0" :::
- exit /b
-
- :spinnerStop
- echo dummy > spinnerStop.tmp
- :__spinnerStop
- if exist spinnerStop.tmp goto :__spinnerStop
- exit /b
-
- :spinnerThread
- for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a"
- set "spinChars=\|/-"
-
- :spinnerLoop
- set /a "spinner=(spinner + 1) %% 4"
- <nul set /p ".=Waiting...!spinChars:~%spinner%,1!!CR!"
- ping localhost -n 2 > nul 2>&1
- if not exist spinnerStop.tmp goto :spinnerLoop
- del spinnerStop.tmp > nul 2>&1
- echo(
- exit /b
-
- :GetKey
- set "key="
- for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
- if not defined key set "key=%%L"
- )
- set "key=%key:~-1%"
- exit /b
复制代码
作者: happy886rr 时间: 2016-9-7 07:28
回复 1# 523066680
这招不错啊, 摆脱了第三方,运行速度更佳。还有aa77dd@163.com提供的方案足以做个很棒的贪吃蛇。
作者: 523066680 时间: 2016-9-7 09:57
链接发在顶楼了,一个批处理版的2048游戏。
网站也不错,各种问题、游戏、各种语言编写的版本。
作者: CrLf 时间: 2016-9-7 12:19
回复 2# aa77dd@163.com
再简化:复制代码
话说从链接中看到了熟悉的...- for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
复制代码
- For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0"
复制代码
复制代码
看来歪果仁也发现了这些
作者: aa77dd@163.com 时间: 2016-9-7 12:41
回复 5# CrLf
有个东西是一直想要的, 但从没看到, 今天突然发现, 至少对我来说, 是发现了黑科技哦- certutil -decode
- certutil -decodehex
复制代码
作者: CrLf 时间: 2016-9-7 12:50
回复 6# aa77dd@163.com
CrLf 对你使出会心一击:http://www.bathome.net/viewthread.php?tid=31883
作者: aa77dd@163.com 时间: 2016-9-7 13:02
本帖最后由 aa77dd@163.com 于 2016-9-7 13:12 编辑
回复 7# CrLf
支持的编码文件里 即使 有好多的 CRLF, 不管是本体真身, 还是克隆的, 统统都会被忽略啊
还有注释行, 所以我用这个来把任意的小 EXE 包含在 批处理文件里,
这样 通常 几k 的 EXE 哪用得着打包呢, 全直接在批处理里文本化就行了
作者: CrLf 时间: 2016-9-9 02:57
回复 5# CrLf
求证了一下,发现除了 delims^=^ 的用法,其他几条老外好像都比我们早发现...
看来哥还是比较叼的,全球首创~
顺便发现老外做的 asciiMap
http://www.dostips.com/forum/viewtopic.php?t=1733
作者: futurer 时间: 2016-10-11 08:51
回复 9# CrLf
delims^=^是?......
作者: CrLf 时间: 2016-10-11 21:40
回复 10# futurer
http://www.bathome.net/viewthread.php?tid=12500
作者: netbenton 时间: 2021-11-4 21:55
简化一下:- for /F "tokens=2 delims=键" %%L in ('xcopy /w . 2^>nul') do set k=%%L
复制代码
有空把以前的游戏更新一下。哈哈!
作者: 523066680 时间: 2021-11-4 22:10
回复 12# netbenton
前段时间还发现一个
[转载]CMD获取当前光标坐标、位置
http://bbs.bathome.net/viewthread.php?tid=58523&highlight=
作者: Echo11 时间: 2022-2-23 14:28
回复 2# aa77dd@163.com
这个方式好象能支持比 choice 更多的字符, 比如 , . / Tab 字符, 甚至组合键 Ctrl+A Ctrl+Q 等
太有意思了,试了下,CTRL+C 不行;
Backspace可以,效果真的就是删除一个字符。比如:复制代码
输出结果就是:复制代码
它真删了左边字符.
作者: ANSL 时间: 2022-12-19 15:51
这个好!正好来改我的菜单
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |