2008-10-31 13 views
8

Bu aptalca geliyor ama işe yaramayacağım. Ben sadece 'yok Burada %%v, %v% and %vFor döngüsündeki değişkenler üzerinde string işlemleri nasıl yapılır?

arasındaki farkı anlamak benim yapmaya çalıştığım şey bu galiba: Bu başarıyla filmlerin her biri için bir küçük resim oluşturur

for %%v in (*.flv) do ffmpeg.exe -i "%%v" -y -f mjpeg -ss 0.001 -vframes 1 -an "%%v.jpg" 

ama sorun:

movie.flv -> movie.flv.jpg 

Yani yapmak istediğim son 4 karakteri %%v'dan çekip ikinci değişkeni kullanmak.

%%v:~0,-3% 

Ama işe yaramıyor, ne düşünebildiğim o yineleme herhangi şunlardır:

böyle şeyler deniyorum.

Herhangi bir fikrin var mı?

+0

döngü İÇİN tek satırda "yankı" "set" ve eğer: nslookup -vc tipi = TXT twitter.com 8.8.8.8 | "" "" bulmak | for/F "tokens = *"% f in ('findstr $') do @ (echo | set/P str =% f) – diyism

cevap

8

Yalnızca dosya adını almak için %% ~ nV kullanın. "Için yardım" Dan

+0

"n" ne anlama geliyor? – UltimateBrent

+0

Bu işe yarıyor! Gerçekten neden olduğunu anlamıyorum ... – UltimateBrent

+1

"Yardım için" ye bakın: Ayrıca, değişken referanslar FOR için değiştirme de geliştirilmiştir. Artık aşağıdaki isteğe bağlı sözdizimini kullanabilirsiniz: % ~ I ​​- Hiç çevreleyen tırnak (") çıkarmadan% genişletir ... % ~ nl - sadece ... – WPWoodJr

8
for %%v in (*.flv) do ffmpeg.exe -i "%%v" -y -f mjpeg -ss 0.001 -vframes 1 -an "%%~nv.jpg" 

:

%~I   - expands %I removing any surrounding quotes (") 
%~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  - expanded path contains short names only 
%~aI  - expands %I to file attributes of file 
%~tI  - expands %I to date/time of file 
%~zI  - expands %I to 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, then this modifier expands to the 
       empty string 
+0

teşekkürler dosya adına% I genişletir Açıklama! – UltimateBrent

2

Yukarıda (I WSH veya bunun yerine diğer script dillerini kullanırlar) ama denemek ve %% v% açıklayabilir olarak toplu o kadar iyi değilim v ve% v%.

İlk iki form, for döngüsünde kullanılır. help for farkı açıklar, ilk form bir toplu iş dosyasında kullanılırken, ikincisi doğrudan komut istemine komut yazarken kullanılır.

son şekli sadece kendi değeriyle değişken adı (ortam değişkeni) yerine geçer: Aslında For döngüsü değişkenlerine dize işlemleri gerçekleştirmek için nasıl arayan Konuyu buldum insanlar için

set FOO=C:\bar\foo 
cd %FOO%\gah 
25

(delayed expansion kullanır) :

setlocal enabledelayedexpansion 

... 

::Replace "12345" with "abcde" 
for %%i in (*.txt) do (
    set temp=%%i 
    echo !temp:12345=abcde! 
) 
+0

Çalışmaları, teşekkür ederim! –

+7

Yankı yerine karşılaştırmak istiyorsanız, bunu değiştirmeyle aynı satırda yapamazsınız, tekrar SET kullanmanız gerekir, örnek ("üçüncü parti" komut dosyası içerip içermediğini kontrol etme): set file = %% i \ n SET dosyası =! dosya: üçüncü parti =! \ n IF %% f ==! dosya! –

0

Yine de tercih başka bir yol oluşturmak için bir alt rutin (: processMpeg) I, döngü her bir eleman için çağrı olan bir %% v değişken geçirmek üzere bu.

for %%v in (*.flv) do call :processMpeg "%%v" 
goto :eof 

:processMpeg 
    set fileName=%~n1 
    echo P1=%1 fileName=%fileName% fullpath=%~dpnx1 
    ffmpeg.exe -i "%~1" -y -f mjpeg -ss 0.001 -vframes 1 -an "%filename%.jpg" 
    goto :eof 
İlgili konular