web-dev-qa-db-ja.com

変数からパスとファイル名をバッチ抽出する

変数からパスとファイル名を抽出するにはどうすればよいですか?

Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg

機能やGOTOを使用せずにそれをしたいです。出来ますか?

67
rschirin
@ECHO OFF
SETLOCAL
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
FOR %%i IN ("%file%") DO (
ECHO filedrive=%%~di
ECHO filepath=%%~pi
ECHO filename=%%~ni
ECHO fileextension=%%~xi
)

really「関数」がないという意味がわからない

明らかに、ECHOSETに変更して、変数をECHOする代わりに設定します...

完全なリストについては、fordocumentation を参照してください。


ceztkoのテストケース(参照用)

@ECHO OFF
SETLOCAL
set file="C:\Users\ l72rugschiri\Desktop\fs.cfg"
FOR /F "delims=" %%i IN ("%file%") DO (
ECHO filedrive=%%~di
ECHO filepath=%%~pi
ECHO filename=%%~ni
ECHO fileextension=%%~xi
)

コメント:コメントをご覧ください。

123
Magoo

パスとファイル名は、(1)BAT自体のパラメーター%1、または(2)CALL %1のパラメーター、または(3)ローカルFOR変数%%aからのみ抽出できます。


HELP CALLまたはHELP FORで、より詳細な情報を見つけることができます。

%〜1-周囲の引用符( ")を削除して%1を展開します
%〜f1-%1を完全修飾パス名に展開します
%〜d1-%1をドライブ文字のみに展開します
%〜p1-%1をパスのみに展開します
%〜n1-%1をファイル名のみに展開します
%〜x1-%1をファイル拡張子のみに展開します
%〜s1-拡張パスには短い名前のみが含まれます
%〜a1-%1をファイル属性に展開します
%〜t1-%1をファイルの日付/時刻に展開します
%〜z1-%1をファイルのサイズに拡張


そして、次を試してください:

パラメータとして解析される文字列をCALLに渡すか、

call :setfile ..\Desktop\fs.cfg
echo %file% = %filepath% + %filename%
goto :eof

:setfile
set file=%~f1
set filepath=%~dp1
set filename=%~nx1
goto :eof

または同等のファイル名をローカルのFOR変数として渡します

for %%a in (..\Desktop\fs.cfg) do (
    set file=%%~fa
    set filepath=%%~dpa
    set filename=%%~nxa
)    
echo %file% = %filepath% + %filename%
116
PA.

これはすべて私のために働く:

@Echo Off
Echo Directory = %~dp0
Echo Object Name With Quotations=%0
Echo Object Name Without Quotes=%~0
Echo Bat File Drive = %~d0
Echo Full File Name = %~n0%~x0
Echo File Name Without Extension = %~n0
Echo File Extension = %~x0
Pause>Nul

出力:

Directory = D:\Users\Thejordster135\Desktop\Code\BAT\

Object Name With Quotations="D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat"

Object Name Without Quotes=D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat

Bat File Drive = D:

Full File Name = Path.bat

File Name Without Extension = Path

File Extension = .bat
12
Thejordster135

実際に実行中のバッチファイルから情報が必要な場合は、これを試してください:

@echo off
set myNameFull=%0
echo myNameFull     %myNameFull%
set myNameShort=%~n0
echo myNameShort    %myNameShort%
set myNameLong=%~nx0
echo myNameLong     %myNameLong%
set myPath=%~dp0
echo myPath         %myPath%
set myLogfileWpath=%myPath%%myNameShort%.log
echo myLogfileWpath %myLogfileWpath%

より多くのサンプル? C:>ヘルプコール

%0 =パラメーター0 =バッチファイル%1 =パラメーター1-最初のパラメーター。バッチファイル...

2
tramper