変数からパスとファイル名を抽出するにはどうすればよいですか?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
機能やGOTOを使用せずにそれをしたいです。出来ますか?
@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「関数」がないという意味がわからない
明らかに、ECHO
をSET
に変更して、変数をECHOする代わりに設定します...
完全なリストについては、for
documentation を参照してください。
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
)
コメント:コメントをご覧ください。
パスとファイル名は、(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%
これはすべて私のために働く:
@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
実際に実行中のバッチファイルから情報が必要な場合は、これを試してください:
@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-最初のパラメーター。バッチファイル...