gpt4 book ai didi

windows - DOSKEY 召回别名

转载 作者:可可西里 更新时间:2023-11-01 14:14:41 25 4
gpt4 key购买 nike

是否可以使用 DOSKEY 调用别名?简单的例子..我想做这样的事情:

DOSKEY a=someCommand
DOSKEY b=someOtherCommand
DOSKEY c=andAThirdCommand

:: How to do this? -> DOSKEY all=a+b+c

我已经知道我可以通过这样写来做到这一点:

DOSKEY all=someCommand ^& someOtherCommand ^& andAThirdCommand

但在重用的意义上,我想重用上面定义的别名。有可能如我所愿吗?

谢谢!

PS:在这里看到这个,但这不是一个令人满意的答案。似乎它不会工作。 :(

最佳答案

好问题,很难回答...不过,我可以建议使用简单的批处理脚本来解决问题。

假设我们定义了 doskey a=commandAdoskey a=commandBdoskey c=commandC 宏。

  1. 静态 方法:让我们为脚本命名,例如dem(define macro)并将其放置在您的路径中。然后 dem acb a c b 应该定义一个新的宏 acb (准备进一步使用) 如下: doskey acb=commandA $T commandC $T 命令B。该脚本可以通过 dsk 提供的脚本稍作改编来建立(提示:不是启动宏文本,构成新的文本宏,但要注意另一个转义)。

  2. 动态 方法:让我们为脚本命名,例如dsk (doskey) 并将其放置在您的路径中的某个位置。然后 dsk a b c 应该按顺序调用宏 abc。传递给脚本的参数(宏名称)的数量没有限制。该脚本适用于定义非常简单的宏,但是

    • 允许使用 % 百分号,例如 doskey a=echo %variable% 宏和/或甚至 for 循环,例如 doskey a=for/F "tokens=*"%G in ('dir/b/s *.txt') do @echo %G;
    • 允许在宏中使用 $T 串联命令(相当于批处理文件中的 &),例如 doskey a=dir $T set;通过将 $T 替换为 & 来完成(在极少数情况下还不够,然后需要拆分并单独执行命令)。

已知问题和/或限制(如果不了解所用宏的真实结构则无法解决); dsk 脚本

  • for 循环可能会给%%parameter 变量带来问题;否决在宏中使用:%%{(外循环)和 %%? %%@(内循环)
  • 不允许像 doskey a=dir ^> somefile 这样的管道或重定向;
  • 不允许在宏中使用 ^& 连接命令(但允许 doskey 内在 $T 连接);
  • 不允许启动批处理 .bat.cmd 脚本(需要 call %xitem% 而不是 %xitem %:doItem 过程中(cca 第 50 行);
  • 如果未找到宏名称,则直接跳过...

脚本dsk如下:

:: dsk.bat
@ECHO OFF >NUL
@SETLOCAL enableextensions enabledelayedexpansion
set "CheckOnly=0"

set "DoneList="
set "ToDoList="
set "xitem=x"
for %%{ in (%*) do (
set "_G_found=0"
echo.
for /F "tokens=1* delims==" %%? in ('doskey /macros') do (
if /i "%%{"=="%%?" (
for /F "tokens=*" %%_ in ("%%@") do set "item=%%_"
if /i "!item:~0,3!"=="for" set "item=!item:%%=%%%%!"
if "%CheckOnly%"=="1" (
echo : to do: '!item!'
) else (
echo : To Do: '!item!'
call :doItem !item!
)
set "DoneList=!DoneList! +%%{"
set "_G_found=1"
)
)
if "!_G_found!"=="0" (
set "DoneList=!DoneList! -%%{"
echo : macro: [%%{] ^(not found^)
if "!ToDoList!"=="" set "ToDoList=!ToDoList!, [%%{]"
if "!ToDoList!"=="!ToDoList:[%%{]=!" set "ToDoList=!ToDoList!, [%%{]"
)
)
echo.
echo :
echo : trailing progress report
echo :
if "%ToDoList%"=="" (
echo : all found: %DoneList:~1%
) else (
echo : +found, -not found: %DoneList:~1%
echo : %ToDoList:~2% not found in macro name list
)
echo : end of batch %~f0
echo :
:endlocal
@ENDLOCAL
@goto :eof

:doItem
set "xitem=%*"
set "xitem=%xitem:$T=&%"
%xitem%
@goto :eof

下一个场景:

d:\bat>doskey /macros
y=for /F "tokens=*" %g in ('dir /b rand.bat') do @echo %g
x=dir /B /AD $T dir /B /AD "D:\Remote\bat\COCL\bu bu bu" $T set y
a=echo CheckOnly=%CheckOnly%
b=rand.bat

dsk y b a x n 调用给出下一个输出:

d:\bat>dsk y b a x n

: To Do: 'for /F "tokens=*" %%g in ('dir /b rand.bat') do @echo %%g'
rand.bat

: To Do: 'rand.bat'
The system cannot find the batch label specified - doItem

: To Do: 'echo CheckOnly=%CheckOnly%'
CheckOnly=0

: To Do: 'dir /B /AD $T dir /B /AD "D:\Remote\bat\COCL\bu bu bu" $T set y'
files
a.dot 1.dot 2.dot 3
Environment variable y not defined

: macro: [n] (not found)

:
: trailing progress report
:
: +found, -not found: +y +b +a +x -n
: [n] not found in macro name list
: end of batch d:\bat\dsk.bat
:
d:\bat>

出于调试目的,该脚本相当冗长(还有变量 CheckOnly,值 1= 仅 echo 命令, 0= 在宏中回显和执行 命令)。

关于windows - DOSKEY 召回别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com