54

Еще в школе у меня был файл .login в духе

alias ll = ls -l  
alias dir = ls -Fhl  
alias web = cd ~/public/public_www/development  

Я бы хотел сделать что-то подобное с моей коробкой XP здесь, на работе, но большинство ресурсов, которые я нашел в Интернете, кажутся довольно сложными и тяжелыми. Есть ли способ сделать это, который не требует взлома реестра или запуска большого пакетного файла?

Первоначальная причина, по которой я спрашивал об этом, заключалась в том, что мне нужна только командная строка для одной команды в одной конкретной папке, и я хотел быстро получить доступ к этой папке, когда запустил командную строку. Но принятый ответ на этот вопрос настолько хорош, что я решил спросить о своей исходной проблеме в виде отдельного вопроса: Изменить начальную папку по умолчанию для командной строки Windows.

6 ответов6

84

Мало кто знает об этом, но вы можете использовать встроенный макро-инструмент doskey , единственная проблема в том, что он не сохраняет. Есть много способов обойти это все же.

использование:

doskey ls=dir

Теперь ls создаст список каталогов так же, как и dir .

Если вы хотите использовать аргументы с командами, используйте этот синтаксис:

doskey d=dir $*

Что касается обходного пути, чтобы заставить их сохранить:

  • сохранить все псевдонимы в файл в этом формате:
doskey ls=dir
doskey ..=cd ..

и поместите его в один из каталогов на вашем пути. Назовите это как-то коротко, как a.cmd, поэтому, когда вы открываете cmd, вы можете ввести a, чтобы загрузить ваши псевдонимы.

Если набрать a и нажать Enter, кажется, слишком много работы, добавьте это в ваш скрипт AutoHotkey :

WinWaitActive, C:\WINDOWS\system32\cmd.exe
Send {a}{Enter}

Загрузка псевдонимов автоматически:

Вы можете изменить все ярлыки на cmd так, чтобы они указывали на %SystemRoot%\system32\cmd.exe /K C:\path\to\aliases.cmd , заменяя C:\path\to\aliases.cmd на местоположение вашего файла псевдонимов. Если вы обычно запускаете его из окна запуска, вы можете:

  • Например, переименуйте исполняемый файл cmd в cmd2.exe и замените его сценарием или другим исполняемым файлом, который запускает указанную выше команду (я бы не рекомендовал этот метод, так как многие приложения зависят от cmd)
  • Сделайте пакетный скрипт и назовите его, например, cmda (cmd with aliases). Пусть он запустит указанную выше команду и поместит этот пакетный скрипт где-нибудь на вашем пути.
38

Это просто как:

  1. Создайте файл с псевдонимами, например, c:\bin\aliases:

    ls=dir /ONE $*
    cd=cd /d $*
    python=python -ic "" 
    ps=tasklist $*
    kill=taskkill /IM $*
    
  2. Создайте файл со всем, что вы хотите запустить при запуске cmd.exe, включая загрузку псевдонимов с помощью doskey, например, c:\bin\cmd_autoruns.cmd:

    @echo off
    cls
    color 0A
    doskey /macrofile=c:\bin\aliases
    
  3. Создайте и запустите один раз командный файл (например, set_cmd_autorun.cmd), который установит для ключа Autorun командного процессора значение cmd_autoruns.cmd:

    reg add "hkcu\software\microsoft\command processor" /v Autorun /t reg_sz /d c:\bin\cmd_autoruns.cmd
    

В качестве альтернативы set_cmd_autorun.cmd также можно вместо этого создать файл .reg, подобный приведенному ниже, и затем объединить его двойным щелчком:

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
"DefaultColor"=dword:00000000
"EnableExtensions"=dword:00000001
"PathCompletionChar"=dword:00000009
"Autorun"="c:\\bin\\cmd_autoruns.cmd"
5

Мой ответ похож на Вриолька

Я создал файл .bat, содержащий мои макросы (например, c:\winscripts\autoexec.bat):

@doskey whereis=c:\winscripts\whereis.cmd $*
@doskey ls=dir /b $*
@doskey l=dir /od/p/q/tw $*

а потом из командной строки cmd запустил "cmd /?"msgstr "чтобы найти раздел реестра для редактирования для автозапуска cmd:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
  and/or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

используя regedit, добавьте путь к вашему пакетному файлу макроса в значение AutoRun (добавьте ключ AutoRun, если его там нет):

c:\winscripts\autoexec.bat

теперь всякий раз, когда вы запускаете "cmd" из приглашения Пуск-> Выполнить, этот autoexec.bat также будет запускаться и создавать макросы doskey для вас.

Кстати, whereis.cmd содержит это:

@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i

который ищет переменную PATH по указанному вами термину:

c:>whereis javaw
c:\jdk\bin\javaw.exe
1

Вы можете создавать .cmd файлы и размещать их где-нибудь в вашем% PATH% (например, C:\Windows). Чтобы использовать свой веб-псевдоним в качестве примера:

@C:
@cd \inetpub\wwwroot

Сделал бы что-то вроде:

M:\> web
C:\inetpub\wwwroot>

Я не знаю ни одного способа сделать плоский файл стиля .aliases.

1

очень быстрый и грязный способ получить готовый ярлык, который не требует особых усилий, - это создать пакетный файл с именем псевдонима в одном из каталогов, которые являются частью переменной среды PATH. Например, я хотел вызвать Notepad++ через псевдоним, поэтому я создал npp.bat в C:\WINDOWS, который содержал следующее:

"c:\Program Files\Notepad++\notepad++.exe" %1 %2 %3 %4 %5

Теперь команду npp можно использовать из любой оболочки cmd, без файлов автозапуска и / или экскурсий в реестр.

0

Я сделал это с помощью быстрого скрипта Python:

import sys
import string
import os
import glob

def listAll():
        for infile in glob.glob("c:\\aliases\\*.bat"):
            fileName = infile
            fileName = fileName[len("c:\\aliases\\"):len(fileName)-4]
            fileContents = open("c:\\aliases\\" + fileName + ".bat", "r")
            fileContents.readline()
            fileContentString=fileContents.readline()
            fileName += " is aliased to "
            fileName += fileContentString[0:len(fileContentString)-3]
            print fileName

def listSome(which):
        for infile in glob.glob("c:\\aliases\\*.bat"):
            fileName = infile
            fileName = fileName[len("c:\\aliases\\"):len(fileName)-4]
            fileContents = open("c:\\aliases\\" + fileName + ".bat", "r")
            fileContents.readline()
            fileContentString=fileContents.readline()
            if fileName.find(which)==0:
                fileName += " is aliased to "
                fileName += fileContentString[0:len(fileContentString)-3]
                print fileName

if len(sys.argv)>1:
    if sys.argv[1]!="-p":
        file = open("c:\\aliases\\"+sys.argv[1]+".bat", "w")
        file.write("@ECHO OFF\n")
        counter=0
        totalInput=""
        counter=0
        for arg in sys.argv:
            if counter > 1:
                totalInput+= arg + " "
            counter+=1

        if totalInput.find(".exe")!=-1:
            file.write("\"")

        counter=0

        for arg in sys.argv:
            if counter > 1:
                file.write(arg)
                if sys.argv[1]==sys.argv[2]:
                    if counter==2:
                        file.write(".exe")
                temparg=str(arg)
                if temparg.find(".exe")!=-1:
                    file.write("\"")
                file.write(" ")
            counter+=1
        file.write("%*")

        print "Aliased " + sys.argv[1] + " to " + totalInput
    else:
        if len(sys.argv)>2:
            listSome(sys.argv[2])
        else:
            listAll()
else:
    listAll()

Извините за плохой сценарий, но использование довольно приятно, IMO. Поместите его где-нибудь на вашем пути, добавьте .py к вашему PATHEXT и добавьте c:\aliases к своему PATH (или измените его, в зависимости от того, что подходит), затем используйте:

alias <command> <action>

для псевдонима (Да, нет =, хотя добавить туда .split не составит труда), и:

alias -p <command or part of>

Чтобы показать, что что-то есть.

Взломать, но тупо полезно. Есть эквивалентный сценарий unalias, но я уверен, что вы можете решить его.

редактировать: это, очевидно, требует Python, написанный на v26, но, вероятно, будет работать во всем, что в последнее время. Как и раньше, извините за качество :)

edit2: На самом деле, что-то вроде этого, но было бы лучше добавить в доски вещи. Вы также можете добавить команды запуска в cmd с ключом реестра автозапуска, чтобы это было намного чище.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .