Comment puis-je extraire le chemin et le nom du fichier d'une variable?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
Je veux le faire sans utiliser aucune fonction ou GOTO. c'est possible?
@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
)
Pas vraiment sûr de ce que vous entendez par aucune "fonction"
Évidemment, changez ECHO
en SET
pour définir les variables plutôt que de les modifier.
Voir for
documentation pour une liste complète.
le cas de test de Ceztko (pour référence)
@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
)
Commentaire: s'il vous plaît voir les commentaires.
Vous pouvez uniquement extraire chemin et nom de fichier d'un (1) paramètre de la BAT lui-même %1
ou (2) du paramètre d'un CALL %1
ou (3) d'une variable FOR locale %%a
. .
dans HELP CALL
ou HELP FOR
, vous pouvez trouver des informations plus détaillées:
% ~ 1 - développe% 1 en supprimant les guillemets environnants (")
% ~ f1 - développe% 1 en un nom de chemin complet.
% ~ d1 - étend% 1 à une lettre de lecteur uniquement
% ~ p1 - étend% 1 à un chemin uniquement
% ~ n1 - développe% 1 en un nom de fichier uniquement
% ~ x1 - développe% 1 en une extension de fichier uniquement
% ~ s1 - le chemin développé ne contient que des noms abrégés
% ~ a1 - développe% 1 en attributs de fichier
% ~ t1 - développe% 1 en date/heure du fichier
% ~ z1 - étend% 1 à la taille du fichier
Et puis essayez ce qui suit:
Soit vous transmettez la chaîne à analyser en tant que paramètre à un appel
call :setfile ..\Desktop\fs.cfg
echo %file% = %filepath% + %filename%
goto :eof
:setfile
set file=%~f1
set filepath=%~dp1
set filename=%~nx1
goto :eof
ou l'équivalent, passez le nom du fichier en tant que variable FOR locale
for %%a in (..\Desktop\fs.cfg) do (
set file=%%~fa
set filepath=%%~dpa
set filename=%%~nxa
)
echo %file% = %filepath% + %filename%
Tout cela fonctionne pour moi:
@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
Sortie:
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
si vous voulez des informations sur le fichier batch en cours, essayez ceci:
@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%
plus d'échantillons? C:> HELP CALL
% 0 = paramètre 0 = fichier batch% 1 = paramètre 1 - 1er par. passé à batchfile ... afin que vous puissiez essayer ce genre de choses (par exemple, "~ dp") entre le 1er (par exemple, "%") et le dernier (par exemple, "1") également pour les paramètres