批处理之家's Archiver

523066680 发表于 2016-9-6 23:56

[转]不需要choice.exe和回车就能获得按键输入的方法/黑科技

[i=s] 本帖最后由 523066680 于 2016-9-7 08:34 编辑 [/i]

[code]@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

[/code]不知道以前有没有人发过?明天再注明出处 :b


===================引用自===================
一个批处理版本的2048游戏
[url=https://rosettacode.org/wiki/2048#Batch_File]https://rosettacode.org/wiki/2048#Batch_File[/url]

aa77dd@163.com 发表于 2016-9-7 06:18

[i=s] 本帖最后由 aa77dd@163.com 于 2016-9-7 06:49 编辑 [/i]

这个方式好象能支持比 choice 更多的字符, 比如 , . / Tab 字符, 甚至组合键 Ctrl+A   Ctrl+Q 等

另外, 我把参数稍改了下, 在 win7 64 位仍能行[code]

xcopy /w . . 2^>NUL
或者
xcopy /w \ \ 2^>NUL
[/code]我能找到的最早出处

February 07, 2013, 03:07:23 AM

jeb @ [url]www.computerhope.com[/url]

[url]http://www.computerhope.com/forum/index.php/topic[/url],135713.msg872140.html?PHPSESSID=70a491e69021f3e926539660fee754b9#msg872140

随后, jeb 又在 stackoverflow 和 groups.google.com/forum 都发表过此代码应用例

[url]http://stackoverflow.com/questions/15140980/batch-color-input-by-user/15160168#15160168[/url]

[url]https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/hpNOPhNfwtI[/url]


我找到的时间最早的示例代码[code]@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[/code]

happy886rr 发表于 2016-9-7 07:28

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=190198&ptid=41643]1#[/url] [i]523066680[/i] [/b]
这招不错啊, 摆脱了第三方,运行速度更佳。还有aa77dd@163.com提供的方案足以做个很棒的贪吃蛇。

523066680 发表于 2016-9-7 09:57

链接发在顶楼了,一个批处理版的2048游戏。
网站也不错,各种问题、游戏、各种语言编写的版本。

CrLf 发表于 2016-9-7 12:19

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=190204&ptid=41643]2#[/url] [i]aa77dd@163.com[/i] [/b]


再简化:[code]xcopy /w . 2^>NUL[/code]话说从链接中看到了熟悉的...[code]for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"[/code][code]For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0"[/code][code]Echo([/code]看来歪果仁也发现了这些

aa77dd@163.com 发表于 2016-9-7 12:41

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=190214&ptid=41643]5#[/url] [i]CrLf[/i] [/b]

有个东西是一直想要的, 但从没看到, 今天突然发现, 至少对我来说, 是发现了黑科技哦[code]certutil -decode
certutil -decodehex[/code]

CrLf 发表于 2016-9-7 12:50

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=190216&ptid=41643]6#[/url] [i]aa77dd@163.com[/i] [/b]


    CrLf 对你使出会心一击:[url]http://www.bathome.net/viewthread.php?tid=31883[/url]

aa77dd@163.com 发表于 2016-9-7 13:02

[i=s] 本帖最后由 aa77dd@163.com 于 2016-9-7 13:12 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=190217&ptid=41643]7#[/url] [i]CrLf[/i] [/b]


支持的编码文件里 [b]即使 有好多的 CRLF, 不管是本体真身, 还是克隆的, 统统都会被忽略啊[/b]

还有注释行, 所以我用这个来把任意的小 EXE 包含在 批处理文件里,

这样 通常 几k 的 EXE 哪用得着打包呢, 全直接在批处理里文本化就行了

CrLf 发表于 2016-9-9 02:57

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=190214&ptid=41643]5#[/url] [i]CrLf[/i] [/b]


求证了一下,发现除了 delims^=^ 的用法,其他几条老外好像都比我们早发现...
看来哥还是比较叼的,全球首创~

顺便发现老外做的 asciiMap
[url]http://www.dostips.com/forum/viewtopic.php?t=1733[/url]

futurer 发表于 2016-10-11 08:51

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=190299&ptid=41643]9#[/url] [i]CrLf[/i] [/b]


    delims^=^是?......

CrLf 发表于 2016-10-11 21:40

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=191639&ptid=41643]10#[/url] [i]futurer[/i] [/b]


    [url]http://www.bathome.net/viewthread.php?tid=12500[/url]

netbenton 发表于 2021-11-4 21:55

简化一下:[code]for /F "tokens=2 delims=键" %%L in ('xcopy /w . 2^>nul') do set k=%%L[/code]有空把以前的游戏更新一下。哈哈!

523066680 发表于 2021-11-4 22:10

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=247650&ptid=41643]12#[/url] [i]netbenton[/i] [/b]

    前段时间还发现一个

[转载]CMD获取当前光标坐标、位置
[url]http://bbs.bathome.net/viewthread.php?tid=58523&highlight=[/url]

Echo11 发表于 2022-2-23 14:28

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=190204&ptid=41643]2#[/url] [i]aa77dd@163.com[/i] [/b]


    [quote]这个方式好象能支持比 choice 更多的字符, 比如 , . / Tab 字符, 甚至组合键 Ctrl+A   Ctrl+Q 等[/quote]
太有意思了,试了下,CTRL+C 不行;
Backspace可以,效果真的就是删除一个字符。比如:[code]echo.key is:(%key%)[/code]输出结果就是:[code]key is:)[/code]它真删了左边字符.

ANSL 发表于 2022-12-19 15:51

**** 作者被禁止或删除 内容自动屏蔽 ****

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.