現在のバッチ ファイルが特定のフォルダーにあるかどうかを確認するにはどうすればよいでしょうか?

現在のバッチ ファイルが特定のフォルダーにあるかどうかを確認するにはどうすればよいでしょうか?

こんにちは。私はバッチ ファイルについてあまり詳しくないので、この質問が愚かに思われたら申し訳ありませんが、本当に助けが必要です。

たとえば、指定したフォルダ内にあるかどうかを確認するバッチ スクリプトが必要です%userprofile%\Desktop。ファイル名は気にしてほしくありません。どこから始めたらよいのかまったくわかりません。現在のパスやファイル名などを取得する方法は知っていますが、私が知っているのはそれだけです。プログラムに現在のパスと、存在するかどうかを確認したいパスを比較させるにはどうすればよいですか。または、もっと効率的な方法はありますか。

私が達成したいのは次のようなものです:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

どなたか助けていただければ幸いです。皆さんありがとう

答え1

あなたが提起した質問はおそらくあなたが予想するよりも難しいものなので、謝罪する必要はありません。

解決

これは、バッチ ファイルが特定のフォルダー (この場合はデスクトップ フォルダー) にあるかどうかをテストする方法です。

@echo off

:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%

:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
    echo This file is on Desktop.
) else (
    echo This file is not on Desktop.
)

注意事項

  • パスを正規化する別の方法(私のお気に入り)は次のとおりです。

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • いずれにせよ、末尾の を削除したいでしょう\。これは正規化によって自動的に行われる処理の1つです。
  • %~dp0の代わりに変数を使用してください%cd%。後者の意味はスクリプトが動作するフォルダ1つ目はスクリプトが保存されているフォルダ(それがあなたが求めていたものです)

    • %0バッチスクリプトの場所を示します
    • dp(つまり%dp0)を追加することで、ディスクそしてパスファイル名と拡張子を省略します(これは次のようなものでexample.bat、次のステップである等価性チェックで負担になります)。
    • 追加することで、必要に応じて~開口部や閉鎖を削除するように要求します"(つまり、パスにスペースが含まれている場合)。
  • "パス文字列内のスペースによるエラーを防ぐためにパスが折り返されます。


思ったほど簡単ではないですよね?

答え2

以下を使用した最小限の動作例%cd%:

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

中間変数の使用:

FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

どこから始めればいいのかわからないとおっしゃったので、こちらがよい読み物です: https://en.wikibooks.org/wiki/Windows_Batch_Scripting

関連情報