Soru Batch Extract yolu ve bir değişkenden dosya adı


Bir değişkenden yol ve dosya adını nasıl çıkarabilirim?

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

Bunu herhangi bir işlev veya herhangi bir GOTO kullanmadan yapmak istiyorum. mümkün mü?


52
2018-03-22 10:15


Menşei


Olası kopya Dosya adını toplu olarak tam yoldan nasıl ayırırım? - iTayb


Cevaplar:


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

Değil Gerçekten mi "İşlev" ile ne demek istediğine emin

Açıkçası, değişim ECHO için SET Değişkenleri ayarlamak için onları ECHOing ...

Görmek for  belgeleme tam liste için.


ceztko'nun test vakası (referans için)

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

Yorum: lütfen yorumları okuyun.


106
2018-03-22 10:32



Bu, whitespaces ile dosya yolları için çalışmıyor - meir
@meir - true; Bir düzeltme gönderdim. Birkaç yıl içinde çok şey öğreniyorsun. - Magoo
@TrivisionZero: Hayır, dosya adı veya yolun boşluk içermesi durumunda teklifler gereklidir. - Magoo
@ceztko: Lütfen tam olarak neyin dahil olduğunu açıklayın. /f yapar. - Magoo
/ F Döngünün yürütülmesini, sadece bir jetona göre sınırlar. belgeleme. Testlerimde gerekliydi, görünüşe göre yol geçen alıntılar tarafından kapatıldı. Örneğinizde, bu tamamen güvenli ve sadece döngünün sadece bir kez yürütülmesi gerçeğiyle ilgili daha açık. - ceztko


Sadece yol ve dosya ismini (1) BAT'ın kendisinin bir parametresinden ayıklayabilirsiniz. %1veya (2) CALL parametresi %1 veya (3) yerel bir FOR değişken %%a.


içinde HELP CALL veya HELP FOR daha detaylı bilgi bulabilirsiniz:

% ~ 1 -% 1'i çevreleyen tırnakları kaldırarak genişletir (")
% ~ f1 -% 1'i tam nitelikli bir yol adına genişletir
% ~ d1 -% 1 bir sürücü harfine genişler
% ~ p1 -% 1'i yalnızca bir yola genişletir
% ~ n1 -% 1 dosyasını bir dosya adına genişletir
% ~ x1 -% 1 dosyasını bir dosya uzantısına genişletir
% ~ s1 - genişletilmiş yol sadece kısa isimleri içerir
% ~ a1 -% 1 dosyasını dosya özniteliklerine genişletir
% ~ t1 -% 1 dosyasını tarih / saat olarak genişletir
% ~ z1 -% 1 dosyasını boyutuna genişletir
 


Ve sonra aşağıdakileri deneyin:

ÇAĞRI için bir parametre olarak ayrıştırılacak dizeyi geçirin

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

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

veya eşdeğeri, dosya adını yerel bir FOR değişken olarak geçirir

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

97
2018-03-22 10:33





Bütün bunlar benim için çalışıyor:

@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

Çıktı:

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

9
2018-01-02 23:02





gerçek çalışan batchfile'dan infos istiyorsanız bunu dene :

@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%

daha fazla numune     C:> YARDIM ÇAĞRISI

% 0 = parametre 0 = batchfile % 1 = parametre 1 - 1. par. batchfile öğesine aktarıldı ... böylece parametreleri (örneğin "%") ve son (ör. "1") arasında da bu maddeleri (örneğin "~ dp") deneyebilirsiniz.


2
2017-10-27 15:08