2016-03-22 20 views
0

Bunun için bir çözüm arıyorum. Ben aşağıdaki gibi görünür dosyaların çok sayıda varToplu iş dosyasında dosya adı düzenlerini bulun

,

{some_texthere_133}_Ritem_123.xml 
{some_texthere_233}_Ritem_456.xml 
{some_texthere_333}_Ritem_564.xml 

Ben metin içeren geçerli dizinde herhangi bir dosya adları tespit veya dışında alt çizgi izledi ön ek olarak parantez içinde altını çizmek istiyorum de, ve dosya adının bu bölümünü kaldırın.

Ritem_123.xml 
Ritem_456.xml 
Ritem_789.xml 

Yukarıda belirtilen biçim sonuç olmalıdır. Herhangi biri bana yardımcı olabilir.

+0

@ aschipfl..Bu, bulduğum komutlardan biridir. @ %% F IN İÇİN ECHO KAPALI ("[] *") YAPIN: "%% F" işlemi GOTO: EOF: process SET oldname =% 1 SET "newname =% ~ nx1" SET "newname =% newname:] =%" RENAME% oldname% "% newname%" .... köşeli parantez ve boşluk olduğunda iyi çalışıyor. ??? – rahul

+0

Lütfen kodunuzu düzenleyerek soruna ekleyin; Teşekkürler! – aschipfl

+0

@ a_horse_with_no_name - Dosyalar, Ritem_121.xml Ritem_452.xml Ritem_783.xml olarak yeniden adlandırılırsa çok yararlı olur. Son rakam 1'den 9'a kadar numaralandırıldı. – rahul

cevap

1

Saf toplu:

@echo off 
setlocal disableDelayedExpansion 
for /f "delims=" %%F in ('dir /b /a-d {*}_*') do (
    set "file=%%F" 
    setlocal enableDelayedExpansion 
    ren "!file!" "!file:*}_=!" 
    endlocal 
) 
Eğer dosya adları hiçbiri ! karakterini içerdiğini biliyorsanız

, ardından kod için kolaylaştırır:

@echo off 
setlocal enableDelayedExpansion 
for /f "delims=" %%F in ('dir /b /a-d {*}_*') do (
    set "file=%%F" 
    ren "!file!" "!file:*}_=!" 
) 

Yoksa JREN.BAT - a regular expression file renaming batch utility kullanabilirsiniz. XP'den ileriye doğru herhangi bir Windows makinesinde yerel olarak çalışan salt komut dosyası (karma JScript/toplu iş). Bir toplu iş dosyası oluşturmanıza ve kullanmanıza izin veren herhangi bir sitede bunu kullanmayla ilgili hiçbir sorun yaşamamalısınız. Sadece bağlantıdan gelen kodu JREN.BAT adlı bir dosyaya kopyalayın.

jren "^{.*?}_" "" 

Komutu bir toplu iş komut dosyası içine koyarsanız, CALL JREN kullanmanız gerekir.

JREN, çok güçlü ve kullanışlı bir yeniden adlandırma aracıdır. Disk belleği çıktısı almak istiyorsanız, tüm belgeler jren /? veya jren /?? aracılığıyla komut satırından kullanılabilir.

0

Herhangi bir regex renamer kullanmak istiyorsunuz. Bence bu soru için yanlış türde bir forumdasınız. Olası bir çözüm,

Here.

Notepad ++ kullanarak biraz test ettim. Her regex tam olarak aynı değil, bu yüzden dikkatli bir şekilde ilerleyin.

Regex:

  • [^}]+ b bir şey

    • \{ ve \} Normal kıvırcık parantez şunlardır:

      $1 
      

      Bazı açıklama:

      \{[^}]+\}_(Ritem_\d+.xml) 
      

      Şununla Değiştir kapatma küme ayraç, 1 veya daha fazla kez

    • (...) işareti
    • \d+ ondalık sayılar, bir veya daha fazla kez tekrarlanan bir grup ut.

    Yerine takma yalnızca $1'u kullanır. Değiştirirken eşleşen grupları kullanabilirsiniz. $0, eşleştirdiğiniz her şeydir. $1, ilk grup parantezinin içinde.

    Regex hakkında daha fazla bilgi için regex cheat sheet numaralı telefondan daha fazla seçenek arayın.

  • +0

    @ johannes..i bu görevi istiyorum cmd'den yapılacak, işyerinde bunu gerçekleştirmem gerektiğinden, diğer yazılımların kullanılmasına izin verilmez. – rahul

    +0

    @rahul İşvereninizle konuşun, kesinlikle görevinizi zamanında tamamlamanızı istiyor. – Johannes

    +0

    @ johannes..yes, ancak sadece cmd kullanarak. – rahul

    0
    ren *Ritem_???.xml Ritem_???.xml 
    

    DÜZENLEME:

    bu deneyin:

    @echo off 
    
    setlocal enableDelayedExpansion 
    for %%# in ("{*}*") do (
        for /f "tokens=1,2,3,4 delims=_" %%a in ("%%#") do (
        ren "%%#" "%%b_%%c_%%d" 
    ) 
    ) 
    
    +0

    Bu çalışmadı ... – rahul

    +0

    @rahul - aynı son hanelere sahip dosyalar var mı? – npocmaka

    +0

    Hayır .. sadece örnek olarak ... dosya adı RstoreItem_1234_20160322 (dosya oluşturulduğunda datetime), – rahul

    0

    Bu yöntemde alt çizgi sayısını "}" olabilir kimseye sonra:

    @echo off 
    setlocal EnableDelayedExpansion 
    
    rem Process all files, split the name at the "}" 
    rem ie: "%%a" = "{5gnf-kjg6-kjg8-tyr9", "%%b" = "_RstoreItem_1234_20160322182705.xml" 
    
    for /F "tokens=1* delims=}" %%a in ('dir /B "{*}*"') do (
    
        rem Get the part after the "}", ie: "_RstoreItem_1234_20160322182705.xml" 
        set "name=%%b" 
    
        rem Do the rename, exclude the first char from the name, ie: "RstoreItem_1234_20160322182705.xml" 
        ren "%%a}%%b" "!name:~1!" 
    
    ) 
    
    İlgili konular