2010-07-09 25 views
112
Ben Wikipedia'dan aşağıdaki toplu komut var

: uzatma flv ile For döngüsü tüm dosyalardaToplu: Kaldır dosya uzantısı

@echo off 
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%f 
) 
pause 

yankılandı olsun, ama markasını istediğiniz dosyanın bazı eylemleri (s) Burada bir defaya ihtiyaç duymadan dosya uzantısına ve bir kez uzatmaya ihtiyacım var. Bu ikisini nasıl alabilirim?

Çözüm aradım ama bulamıyorum. Ben de cmd pencerelere yabancıyım

cevap

221

Sen açıklanan yalnızca dosya adını almak için %%~nf kullanabilirsiniz for için referans:

@echo off 
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%~nf 
) 
pause 

şu seçenekler kullanılabilir:

 
Variable with modifier Description 

%~I      Expands %I which removes any surrounding 
         quotation marks (""). 
%~fI     Expands %I to a fully qualified path name. 
%~dI     Expands %I to a drive letter only. 
%~pI     Expands %I to a path only. 
%~nI     Expands %I to a file name only. 
%~xI     Expands %I to a file extension only. 
%~sI     Expands path to contain short names only. 
%~aI     Expands %I to the file attributes of file. 
%~tI     Expands %I to the date and time of file. 
%~zI     Expands %I to the size of file. 
%~$PATH:I    Searches the directories listed in the PATH environment 
         variable and expands %I to the fully qualified name of 
         the first one found. If the environment variable name is 
         not defined or the file is not found by the search, 
         this modifier expands to the empty string.  
+0

Büyük İş. Bana yardımcı oldu. –

+2

Sadece hızlı bir not: yukarıdaki örnekte ** %% f ** 'C: \ Users \ Admin \ Ordner \ foo.flv' gibi bir şey olurdu ve ** %% ~ nf **' foo' verecek . Eğer herşey _except_ uzantısını kullanırsanız ** %% ~ df %% ~ pf %% ~ nf ** bu size C: \ Users \ Admin \ Ordner \ foo' – ehambright

13

... toplu gerçek acemi değilim, ama bu deneyin:

echo %%~nf 
8

Bu gerçekten geç yanıt, ama ben DiskInternals LinuxReader dışı NTFS (FAT32) dizinlere kaydedilen dosyalara '.efs_ntfs' ekleme ile yaptığı özel bir sorunu çözmek için bu geldi:

@echo off 
REM %1 is the directory to recurse through and %2 is the file extension to remove 
for /R "%1" %%f in (*.%2) do (
    REM Path (sans drive) is given by %%~pf ; drive is given by %%~df 
    REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them 
    copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf" 
    echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf" 
echo. 
) 
pause 
+0

verir. soru, ama aslında bana yardım etti, teşekkürler! – matan7890

+1

@ matan7890 Doğru; op, "dosya (lar) ile bazı eylemler yapmak istiyorum" ifadesini belirtmiyor, ancak bu eylemlerden biri bunları yeniden adlandırıyor olabilir, bu durumda cevabım kabul edilen cevabın genişletilmesidir. –

+0

Bu, bir eki açan ve fidye talebi ile birlikte tüm dosyalarına '.encrypted 'eklenmiş bir arkadaşımın yardımına yardımcı oldu. Görünüşe göre, saldıran betik, bunun tersi olan ve tüm dosyalara '.encrypted 'eklenmiş bir toplu iş dosyası olmalıdır. – AwokeKnowing

23

Değişkeninizin sakladığı dosyanın gerçekte mevcut olmaması durumunda FOR yaklaşımı çalışmayacaktır. Eğer uzatma uzunluğunu biliyorsanız, kullanabilirsiniz biri hüner bir alt alıyor:

%var:~0,-4% 

-4 son 4 rakamı ( .ext muhtemelen ) kesilecek demektir.

+0

Bu benim için çalışmıyor (Win8.1'de) - belki yankılanıyorsa yankılanıyor: echo% f: ~ 0, -4% 'soruda kullanılan örnek bağlamında. Neyi yanlış yapıyorum? – Wolf

+2

Görünüşe göre "normal" değişkenler için çalışıyor, değişkenler için değil (veya belki doğru sözdizimini bilmiyorum).Neyse bu OP örnek bağlamında çalışır: o zaman 'SET fl = %% f' ve' echo% fl: ~ 0,% 1 gibi basit bir komut satırı parametreleri için Win10 benim için -4% ' –

+1

İşleri,% 2 vb Thanx! – deko

0

Birden fazla uzantı nasıl kaldırılır? Dosyamın filename.abc.def.xyz.anything uzantısına sahip olduğunu ve yalnızca dosya adını ayıklamak istediğimi söyleyelim.