1

バッチファイルとアイコンを使用してexeプログラムでバッチを有効にするプログラムを使用して、相対ショートカットを作成しようとしています。

エクスプローラー ウィンドウで次のアルファベット並列フォルダーを開くための「ショートカット」と、前のフォルダーを開くためのショートカットが必要です。理想的には、ダブルクリックに使用したエクスプローラー ウィンドウを閉じたいとさえ思います。

私はこれまでに持っています:

@echo off
echo %cd%
for %%a in ("%cd%") do set folder=%%~na
pushd ..
echo %folder%
echo .
dir /A:D /B
pause

%folder% には、バッチが実行されるフォルダーの名前 (パスではありません!) があります。

行: dir /A:D /B は、すべての並列フォルダーを提供する複数行の出力を提供します (pushd を使用してレベルを上げるため..)。%fodler% 値を検索して、その上または下の行を選択する方法を見つける必要があります。

for /f を使用して何かを試しましたが、1 つの文字列ではなく複数の行を処理する場合にはあまり役に立ちません。

任意のアイデア?

4

1 に答える 1

0

正確に何を達成したいのかははっきりしていませんが、次のスニペットはあなたが望むことをするはずです。スクリプトに追加するだけです。

setlocal enabledelayedexpansion

for /f %%a in ('dir /b /ad /on') do (

   @rem shift the current value through the variables
   set previous=!current!
   set current=!next!
   set next=%%a

   @rem check if the "current" value is the right one
   if "!current!"=="%folder%" goto :found
)

@rem if we get here the loop has finished without %current% having the expected value
@rem but we need to check if it was the last folder in the directory
if "%next%"=="%folder%" (
    set previous=%current%
    set current=%next%
    set next=
    goto :found
)

endlocal

@rem exit here if no match is found (should never happen)
goto :eof

@rem variables should have valid values
:found
echo %previous%
echo %current%
echo %next%

説明:

との 3 つの変数previousは、シフト レジスタのように使用されます。ループの反復ごとに、現在のディレクトリの値が変数を通じて 1 桁シフトされます。currentnext

シフトの最後に、current変数は目的のフォルダーに対してテストされます

条件が真になる前にループが終了した場合、これは最後のフォルダーが正しいフォルダーであることを意味するため、後続のシフトが発生します。

それが役立つことを願っています...

于 2010-08-06T21:22:53.690 に答える