◇ドライブかファイルかフォルダかを判別する
バッチファイルにファイルやフォルダをドラッグアンドドロップして処理する時に、ドロップされたものがドライブかフォルダかファイルかを判別します。
:: ドロップされたパスがドライブかファイルかフォルダか判別する;
set TargetPath=%1
set TargetPathATTR=%~a1
set TargetPathATTR=%TargetPathATTR:~0,1%
if /i "%~n1" equ "" (
echo "%1" is drive.
)
if /i "%TargetPathATTR%" equ "d" if /i "%~n1" neq "" (
echo "%1" is folder.
)
if /i "%TargetPathATTR%" neq "d" (
echo "%1" is file.
)
echo.
ドロップされたパスから種別とカレントフォルダ情報を表示するサンプル
DropFileIdentification.bat
@echo off
:: 遅延展開 バグの原因になる場合があるので注意;
setlocal enabledelayedexpansion
:: エスケープシーケンスを利用;
for /f "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set ESC=%%b)
echo ◇ドロップされたパスから種別とカレントフォルダ情報を表示します。
echo.
:: ドロップされたパスがドライブかファイルかフォルダか判別する;
set TargetPath=%1
set TargetPathATTR=%~a1
set TargetPathATTR=%TargetPathATTR:~0,1%
if /i "%~n1" equ "" (
echo "%1" is drive.
)
if /i "%TargetPathATTR%" equ "d" if /i "%~n1" neq "" (
echo "%1" is folder.
)
if /i "%TargetPathATTR%" neq "d" (
echo "%1" is file.
)
echo.
:: ドロップされたパスからカレントフォルダ名を取り出す;
:GetCurrenrFolderName
set TargetFolderName=%~dp1
set TargetFolderName=%TargetFolderName:~0,-1%
set TargetPathATTR=%~a1
set TargetPathATTR=%TargetPathATTR:~0,1%
if /i "%TargetPathATTR%" equ "d" if /i "%~n1" neq "" (
set TargetFolderName=%~dpn1
)
call :GetName "%TargetFolderName%"
goto :EndGetCurrenrFolderName
:GetName
set TargetFolderName=%~n1
exit /b
:EndGetCurrenrFolderName
echo Current FolderName = "%TargetFolderName%"
echo.
:: 終了処理を起動条件により分岐(エクスプローラーから起動されていた場合は選択処理);
:EndProcess
echo %CMDCMDLINE%|find /i "%~f0">NUL
if "%ERRORLEVEL%" neq "0" (goto :eof)
choice /t 10 /c qa /d q /m "10秒待機します。即閉じる場合はQ、待機はAを押してください。"
if "%ERRORLEVEL%" equ "2" (
echo %ESC%[1A%ESC%[2K%ESC%[1A
pause
)
goto :eof
おわりに
他にも「⧉Windowsのバッチファイルのテクニックをご紹介します」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。