2016-06-20 4 views
3

ドライブのルートにショートカットがシンボリックリンクされたポータブルドライブの管理パーティションにバッチファイルがあります。ファイルの目的は、ドライブをアンマウントして、指定された文字(通常は便宜上)としてマウントすることです。実行前にバッチファイルをRAMにロードする

ファイルを開くと、ボリュームIDではなく現在の文字を基準にして開きますので、アンマウントが発生すると、コマンドプロセッサは必要に応じてファイルを読み込む際に次に何をするかわかりませんそれをキャッシュするのではなく。

私は考えることができるが、把握することはできません2つの予見解決策があります。

  1. は、ファイルを作成します
  2. を実行する前にRAMにキャッシュされます、ボリュームIDにファイルの実行相対を作る代わりに、マウントポイント({VOLID}がボリュームIDであるところで{VOLID} \ fileを使って試しましたが、そこにあったにもかかわらずファイルを見つけることができませんでした({VOLID} \にナビゲートするとディレクトリを正しく開きましたが、ファイルを正しく開いてください。

答えて

3

その他の回答にもかかわらず、バッチスクリプト全体をRAMにキャッシュするのは簡単です。

ブロックが解析されて実行される前にキャッシュされるため、単一のブロックを作成するだけで済みます。

ブロックにはいくつかの欠点がありますが、パーセント拡張は機能しないため、遅延拡張を使用する必要があります。
callおよびgotoは、ファイルから再度読み取ろうとするため、使用できません。

(goto) 2>nul & (
    echo The script is started 
    REM Need to change the directory, else the unmount doesn't work 
    c: 
    mountvol e: /p 
    mountvol g: \\?\Volume{VOLID}\ 
    dir G:\ 
    echo The script will end now 
    REM Here you need the goto 2>nul hack to avoid an error message 
) 

(goto) 2>nul &はここで奇妙なようだが、それはSO:How to make a batch file delete itself?で説明しています。
gotoがなくても動作しますが、スクリプトはエラーメッセージ

2

ファイルは実行中の場所を確認してくださいthisを参照してください。ポータブルドライブから実行している場合は、永続ドライブの場所(例:c:\ temp)に自身のコピーを作成し、そのバッチファイルのコピーを実行します。

バスファイルを実行しているときにRAMから実行するという概念はありません。 Windowsコマンドプロセッサは常に '次の'コマンドを実行するために.batファイルに戻ります。実行中にバッチファイルを編集すると、コマンドプロセッサーは変更を取得します。

+0

で終了しますが、これを回避しようとしましたが、それが必要な場合は実行しますが、Windowsエクスプローラからファイルを実行している私がディスマウントするとプロセスとすべての子プロセスが強制終了されます(cmdからは発生しません)ので、TEMPから実行されたファイルを持っていてもスクリプトは完了しません。 –

1

JJFすでに正しい答えが書かれています。バッチファイルをRAMにコピーし、Windowsコマンドインタープリタにメモリ内のコマンドラインを解釈するように通知することはできません。 RAMディスクを作成し、バッチファイルをRAMディスクにコピーし、そこから実行することは可能です。しかし、これは仕事を必要以上に複雑にするだけです。

このコメント付きバッチコードは、バッチファイルをディレクトリにコピーして別のWindowsコマンドプロセスで処理する方法を示しています。

@echo off 
rem Is the batch file path not the path of directory for temporary files? 
if /I not "%~dp0" == "%TEMP%\" (

    rem Copy the batch file to directory for temporary files. 
    copy "%~f0" "%TEMP%" >nul 
    rem Run the copy in a separate command process with name of the batch 
    rem file with extension as window title and exit this batch process. 
    start "%~nx0" "%TEMP%\%~nx0" 
    goto :EOF 
) 

echo The batch file is now running from directory for temporary files. 
echo. 
pause 

rem Delete the batch file in directory for temporary files 
rem and exit the command process started for this batch file. 
del "%TEMP%\%~nx0" & exit 

バッチコードで2つのechoコマンドとpauseコマンドを交換してください。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。

  • call /? ...%~dp0(ドライブとバッチファイルそのものである引数0のパス)と%~nx0(名前とバッチファイルの拡張子)
  • copy /?
  • del /?
  • echo /?
  • exit /?
  • goto /?
  • if /?を説明します
  • pause /?
  • rem /?
  • start /?
も参照バッチなどのエラーメッセージを表示して開かれたコンソールウィンドウを避けるために2つの delexitは1行から読み取るの2つのコマンドを実行し、ここで使用オペレータ &の説明については Single line with multiple commands using Windows batch fileに答える

ファイルを処理中にWindowsコマンドインタープリタで予期せず削除されました。

関連する問題