web-dev-qa-db-fra.com

Chemin d'extraction par lots et nom de fichier d'une variable

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?

69
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
)

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 fordocumentation 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.

126
Magoo

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%
118
PA.

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
12
Thejordster135

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

2
tramper