2

現在のディレクトリの上に存在するディレクトリを見つけようとしていますが、バッチ構文が原因で目がくらみます。たとえば、私がいるとしましょう:

c:\dev\projects\folder1\プロジェクト名\batch.bat

ここにある共有 libs フォルダーを見つけたいと思います。

c:\dev\共有

次に、これを再利用できる変数として設定する必要があります。私は次のことを行っていましたが、もはや壁に頭をぶつけることは価値のない段階に達したように感じます。

@setlocal enableextensions enabledelayedexpansion
@echo off
set shareddir=%~dp0
:loop
  set shareddir=!shareddir!..\
  set sharedir2=!shareddir!shared\    
if not exists (%sharedir2%) goto loop
ECHO shareddir found = %sharedir2%

前もって感謝します。

4

3 に答える 3

3

あなたのメソッドは、次のようなバッチファイルのパスに対する相対パスを返すと思います:

c:\dev\projects\folder1\projectname\..\..\..\shared

代わりに次の方法を試してください。

@setlocal enableextensions enabledelayedexpansion
@echo off
pushd "%~dp0"
:loop
   cd ..
   if not exist shared goto loop
set sharedDir=%cd%\shared
popd
ECHO shareddir found = %sharedDir%
于 2013-05-27T23:49:33.583 に答える
0

それを行う別の方法。共有フォルダーが見つからない場合の無限ループを防ぐために、追加のテストを追加しました。

@echo off
setlocal
set "sharedDir=%~dp0"
:loop
for %%F in ("%sharedDir%\..") do if not exist "%%~fF\shared" (
  if %sharedDir% neq %%~fF (
    set "sharedDir=%%~fF"
    goto :loop
  ) else set "sharedDir="
) else set "sharedDir=%%~fF\shared"

:: Display the value. It will be undefined if shared folder not found.
set sharedDir
于 2013-05-28T00:10:57.293 に答える
0
@setlocal enableextensions enabledelayedexpansion
@echo off
set shareddir=%~dp0
:loop
  set shareddir=!shareddir!..\
  set sharedir2=!shareddir!shared\
if not exist "!sharedir2!" goto loop
ECHO shareddir found = !sharedir2!
endlocal

この場合、展開を遅らせる必要はありませんが、とにかく...存在を確認するには使用しますが、使用しIF EXISTませんif exists (コマンドプロンプトは文法を気にしません:-))、括弧の代わりに引用符を使用します(空のスペースを含むパスに必要です)。

于 2013-05-27T23:02:14.870 に答える