Bir dosyanın üst dizinini bir .bat
dosyasından almak istiyorum. Yani, "C:\MyDir\MyFile.txt"
olarak ayarlanmış bir değişken verildiğinde, "C:\MyDir"
almak istiyorum. Başka bir deyişle, tipik bir UNIX ortamında dirname()
işlevselliğine eşdeğerdir. Mümkün mü?Bir toplu iş dosyasındaki dirname() eşdeğerini nasıl alabilirim?
cevap
for %%F in (%filename%) do set dirname=%%~dpF
Bu %filename%
saklanan dosya adının sürücü ve dizine %dirname%
ayarlayacaktır.
Boşluk içeren dosya isimlerine dikkat edin. Ya onlar çevreleyen tırnak seti lazım:
set filename="C:\MyDir\MyFile with space.txt"
veya for
döngüsünde argüman tırnak koymak zorunda: kazandı ikisini aynı anda,
for %%F in ("%filename%") do set dirname=%%~dpF
Ya yöntemi çalışacak
Sanırım, "for döngüsünde * tırnakları * argümanın etrafına koyabilirsiniz" kastediyorsunuz: " – aphoria
Evet, teşekkürler. Şu anda düzgün düşünemiyorum :) – Joey
@mosh, bir hardlink için beklenen sonuç nedir? Ayrıca, geçici çözümlerin Unicode dosya adlarına ve konsol yazı tipine duyarlı olduğunu unutmayın. – Joey
:-) 't ne olursa olsun (hiçbir komut uzantıları vs.) iÇİN kullanamaz sebebi sen paçayı mümkün olabilir ise .. \ kesmek:
set file=c:\dir\file.txt
set dir=%file%\..\
For döngüsü ile ilgili sorun, dizenin sonunda \ sondan ayrılmasıdır. Dirname'i birden çok kez almak istiyorsanız bu sorunlara neden olur. Belki de sadece ana dizin yerine dosyanın bulunduğu dizinin büyükannesinin olduğu dizinin ismini almanız gerekir. Basitçe for döngü tekniği kullanarak ikinci bir kez \ kaldırmak ve büyükbaba dizini almayacak.
Sadece aşağıdakileri yapamazsınız. Değil, "C: \ 1 \ 2":
set filename=c:\1\2\3\t.txt
for %%F in ("%filename%") do set dirname=%%~dpF
for %%F in ("%dirname%") do set dirname=%%~dpF
Bu
birdizin için "\ 1 \ 2 \ 3 c" ayarlayacaktır.Aşağıdaki işlev, sorunu gidermekle de sorunu çözmektedir \. Aşağıdaki gibi çağrılmaktadır.
set filename=c:\1\2\3\t.txt
call :dirname "%filename%" _dirname
call :dirname "%_dirname%" _dirname
Sondaki sorun için iyi bir çözüm. Aksi takdirde, "% dirname%" yi kullanamazsınız, çünkü son fiyat, önceki eğik çizgiden kaçınılacaktır. Böyle bir durumda ''% dirname% \ ''çalışır. Ama her ikisinden de sadece bir tanesi. – Vertigo
- 1. Windows toplu iş dosyasındaki dizeler nasıl birleştirilir?
- 2. Toplu iş komut dosyasındaki iletiler nasıl bastırılır?
- 3. Bir pencere toplu iş komut dosyasındaki bir dosyadan değer okuma
- 4. Adlandırılmış parametreler bir toplu iş dosyasına nasıl iletilir? Ben bir toplu dosyasındaki ilk hatlarının
- 5. Windows toplu iş dosyasındaki 'call'ed rutin' içinden nasıl sonlanır?
- 6. Dize toplu iş dosyasındaki Visual Basic'den dize kullanın
- 7. Toplu iş işlecini kullanarak Matlab'da toplu iş nasıl çalıştırılır,
- 8. Bir toplu iş programını sürdürme
- 9. Bir toplu iş dosyasını PowerShell
- 10. Okuma (Bahar Toplu İş)
- 11. toplu iş dosyası: parametre
- 12. C# dosyasındaki dosyadan nasıl değişiklik tarihi alabilirim?
- 13. Bir toplu iş dosyasına bir txt satırı satırı okuyun.
- 14. Toplu İş Dosyalarındaki Menüler
- 15. toplu iş dosyası.
- 16. R Toplu İş Modunda Eko Zaman Damgası
- 17. Toplu iş dosyası, başka bir toplu iş dosyası yürütmeyi tamamlayana kadar nasıl beklemeli?
- 18. 32 bit kipte bir toplu iş dosyasından 64 bit kipte toplu iş dosyası nasıl çalıştırılır
- 19. Toplu iş komut dosyasından bir toplu iş komut dosyasını nasıl çalıştırırım?
- 20. Bir toplu iş dosyasından hata kodu alın
- 21. Bir toplu iş dosyası kullanarak sertifika çıkartma
- 22. VSIX ile bir toplu iş dosyası dahil
- 23. Toplu iş dosyası ilerleme yüzdesi
- 24. Yığın toplu iş dosyasından çalıştırma
- 25. Salesforce Toplu API iş önceliği
- 26. Bir toplu iş dosyasında hata ayıklama
- 27. Retrofit kullanarak toplu iş talebi
- 28. Django'da toplu iş parçacığını nasıl uygularım?
- 29. Bir toplu iş dosyasında bir giriş cevabını otomatikleştirmek nasıl
- 30. Bir ASP.Net sayfasından toplu iş dosyasını çalıştırma
Boşluklu dosya adları hakkında bir not ekledim; bunlarla test etmeyi unuttum. – Joey