Bir toplu iş dosyasında klasörler arasında nasıl dolaşılır ve uzantıları yeniden adlandırılır?


2

Çalıştırabileceğim tek bir klasör seçerek

ren *.jpeg *.png

Birden fazla klasörüm var. Tüm klasörler arasında dolaşacak ve içindeki dosyaları yeniden adlandıracak bir toplu iş dosyası oluşturmak istiyorum.

Mesela klasörüm var TEST1 ve TEST2 kök dizini içinde TEST. Tüm adlarını yeniden adlandıracak bir toplu iş oluşturmak istiyorum .jpeg içindeki dosyalar TEST1 ve TEST2 için .png.

FOR /R "E:\TEST\" %%G in (*.jpeg) DO ren *.jpeg *.png

Bir hata alıyorum:

Sistem belirtilen dosyayı bulamıyor

Ben sorunu anlamıyorum.


Hata, içinde "jpeg" dosyaları olmayan her klasör için ortaya çıktığını düşünüyorum.
kokbira

Yanıtlar:


3

Uygulamıyorsun for komut ren aksiyon.

for /r "E:\test\" %%G in (*.jpeg) do ren "%%~G" *.png

Değişmen gerek %% için % Bunu etkileşimli olarak yapıyorsanız ve toplu iş dosyasında değilse.

~ boşluk içeren yollarla ilgili olası hataları önlemek için yeniden eklenen tırnakları çıkarır.


tamam, çözümün daha küçük :) - yarasa kütüphanemde eski bir tane kullandım. Ben seninkini test etmedim ama sana inanıyorum.
kokbira


0

Tam bir çözüm aşağıdadır.

Değişkenleri "değişkenler" bölümünde ayarlayın:

@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path2work="C:\Documents and Settings\ubirajara2\Desktop\Nova pasta"
set extension2exclude=jpeg
set extension2put=png

::only an auxiliar variable
set pathbak=%cd%

::go to %path2work% and its drive letter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path2work%') do %%~di
cd %path2work%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path2work%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d *.%extension2exclude%') do (
    set newname=%%~nj.%extension2put%
    echo.- renaming from "%%j" to "!newname!"...
    ren "%%j" "!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on

Üzerinde "jpeg" dosyası olmayan her klasör için bir "dosya bulunamadı" belirir.
kokbira

1
Vay. Çılgın şeyler. Ve bu iş ne %PATH%?
paradroid

peki, bir renamer grubunun ilk versiyonunu yarattığımda, push ve popd hakkında haberi yoktu. bu yüzden "::% path% ve driveletter 'a gidin" = pushd, ::% pathbak%' a ve driveletter = popd :) 'a dön
kokbira

ama bence çok didaktik ve "daha kontrollü" bir çözüm
kokbira

Anlıyorum. Sadece kullanabilirsin %SystemDrive% Sistemin ne nedenle olursa olsun kullanmasını istiyorsanız.
paradroid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.