2016-10-04 4 views
3

最初に使用した後にコマンドプロンプトが突然特定のコマンドを忘れる理由を理解できません。 私の人生を楽にするために私のカスタムコマンドを保存するためのフォルダを作成しました。このフォルダをPATH環境変数に追加して、コマンドにすばやくアクセスできるようにしました。最初の使用後にコマンドプロンプト "忘れる"コマンド

たとえば、次のようになります。 ipconfigを2回以上実行すると、毎回期待通りにコマンドが実行されます。 aliasコマンド(以下に含まれるコード)を2回以上実行すると、期待どおりに動作します。 deletefolderコマンドを2回実行するのは、初めてのみ動作します。二度と 'deletefolder'は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。 aliasコマンドはもう動作しません(認識されません)が、ipconfigは動作します。私のコマンドが再び機能するようにするには、コマンドプロンプトを再起動する必要があります。

私はこれの背後にある理由を検索しようとしましたが、この動作には何の答えも見つかりませんでした。シンプルなもののような気がしますが、何が見つかりませんか?私は可能な限り徹底しようとしています。何かを明確にしなければならないかどうか、私に知らせてください。

deletefolderバッチファイル:

@echo off 

set path=%1 

IF DEFINED path (
    GOTO run 
) ELSE (
    GOTO help 
) 

:help 

    echo. Usage: 
    echo. deletefolder [path] 

exit /B 


:run 

    CHOICE /C YN /M "Are you sure?" 
    IF ERRORLEVEL 1 ( 
     :del /f/s/q %path% > nul 
     :rmdir /s/q %path% 
    ) 

exit /B 

aliasコマンド(作者:ベンジャミンEidelman、[email protected]は)

@echo off 

set operation=%1 
set aliasname=%2 
set aliasfile=%~dp0%2.cmd 

IF "%~1"=="" GOTO help 
IF /I "%~1"=="list" GOTO listaliases 
IF /I "%~1"=="set" GOTO setalias 
IF /I "%~1"=="get" GOTO getalias 
IF /I "%~1"=="delete" GOTO deletealias 
IF /I "%~1"=="here" GOTO setaliashere 

:help 

echo. Usage: 
echo. alias list      - list available cmd aliases 
echo. alias set [name] [command line] - set an alias 
echo. alias get [name]     - show an alias 
echo. alias delete [name]    - delete alias 
echo. alias here [name] [command line] - create alias cmd on cwd 

exit /B 

:listaliases 

dir /B %~dp0*.cmd 
exit /B 

:setaliashere 

set aliasfile=%2.cmd 

:setalias 

if "%aliasname%"=="alias" (
    echo ERROR: cannot set this alias 
    exit /B 1 
) 

echo %1 %2> "%aliasfile%" 
for %%a in ("%aliasfile%") do set /a length=%%~za 
set /a length=length-1 
set commandline=%* 
setlocal enableDelayedExpansion 
call set commandline=!commandline:~%length%! 
set commandline=%commandline% %%* 
echo %commandline%> "%aliasfile%" 
echo INFO: alias "%aliasname%" set 
exit /B 

:getalias 

if exist %aliasfile% (
    type %aliasfile% 
) ELSE (
    echo ERROR: alias not found 
    exit /B 1 
) 
exit /B 

:deletealias 

if /I "%aliasname%"=="alias" (
    echo ERROR: cannot delete this alias 
    exit /B 1 
) 

if exist %aliasfile% (
    del %aliasfile% 
    echo INFO: alias deleted 
) ELSE (
    echo INFO: alias not found 
) 
exit /B  
+0

「doskey /?」と入力します。 –

答えて

5

The PATH environment variableあり非常にspecial (and crucial) meaning

%PATH%環境変数にはフォルダのリストが含まれます。 CMDプロンプトで コマンドが発行されると、オペレーティングシステムは最初に 現在のフォルダー内の実行可能ファイルを検索し、見つからなければ は%PATH%をスキャンします。

PATH変数を任意に変更しないでください。たとえば、別の変数名を使用してください。 _pathは次のようになります。

set "_path=%1" 

IF DEFINED _path (
    GOTO run 
) ELSE (
    GOTO help 
) 

rem your script continues here 
+0

ああ、私の間違いは私が事故によってPath変数を上書きするということですか? –

+0

パス変数をpathに変更しました。非常に良いキャッチ!助けてくれてありがとう! –

関連する問題