使用xcopy实现choice.exe获得按键输入,支持组合键

先看代码:

复制代码
@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
复制代码

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

-----------------------------------------------------------------------------------------

 这个方式好象能支持比 choice 更多的字符, 比如 , . / Tab 字符, 甚至组合键 Ctrl+A   Ctrl+Q 等
另外, 我把参数稍改了下, 在 win7 64 位仍能行

  xcopy /w . . 2^>NUL
  或者
  xcopy /w \ \ 2^>NULCOPY

我能找到的最早出处
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
复制代码

---------------------------------------------------------------------------------------

再简化:

xcopy /w . 2^>NULCOPY

话说从链接中看到了熟悉的...

for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0"
Echo(

看来歪果仁也发现了这些

 

出处:http://www.bathome.net/thread-41643-1-1.html

posted on   jack_Meng  阅读(35)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-11-08 高中数学
2016-11-08 系列文章--打造自己的MVC框架
2016-11-08 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)
2016-11-08 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(一)
2015-11-08 JS实现——计算两日期之差
2013-11-08 C语言利用SMTP协议发送邮件
2013-11-08 C语言发送邮件

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩