2015-01-15 42 views
5

Per aggiungere un semplice "ciao" prefisso a tutti i file PDF in una cartella che sto utilizzando questo file batch:batch di Windows per aggiungere il prefisso ai nomi dei file, perché aggiungere due volte?

FOR %%F IN (*.pdf) DO (RENAME "%%F" "hello%%F") 

Salvato questo in un file "rename.bat" e messo in la cartella mi serve per rinominare i file. Quindi faccio doppio clic su "rename.bat".

Questo funziona quasi ma il primo file ottiene il prefisso aggiunto due volte.

Diciamo che nella cartella che ho: A.pdf, B.pdf, c.pdf, ottengono convertiti in:

  • hellohelloA.pdf
  • helloB.pdf
  • helloC .pdf,

Sai cosa c'è che non va nel file batch?


ho notato che fa sempre questo quando file sono più di uno. Funziona bene quando c'è un solo file nella cartella, ma non è molto utile :-).

+1

Utilizzare DIR/B e immettere l'elenco di nomi in un file di testo. Quindi continua questa lista. Attualmente stai iterando attraverso la cartella mentre stai facendo delle modifiche in quella cartella. – RGuggisberg

+0

possibile duplicato di [Per loop in file batch rinomina un file due volte] (http://stackoverflow.com/questions/18519458/for-loop-in-batch-file-renames-one-file-twice) – MichaelS

risposta

7

/f rimuove il problema di ritrovare un file esistente:

FOR /f "delims=" %%F IN ('DIR /a-d /b *.pdf') DO (RENAME "%%F" "hello%%F") 
+0

Grazie a questo lavoro ! Ho letto su '/ F" delims = "', e vedo che stai chiamando anche il comando ''DIR/a-d/b * .pdf''. Ma potresti spiegare perché il mio non funziona. Per testare ho anche provato a chiamare il file batch 'FOR %% F IN (* .pdf) DO (ECHO" %% F ")' e fa eco solo a 3 file, quindi sai perché quando usi 'RENAME' al posto di 'ECHO' sta rinominando il primo file due volte? –

+0

RENAME cambia l'elenco dei file su cui stai lavorando, echo no –

+1

'FOR %% F ...' richiama i nomi dei file uno alla volta dalla directory del disco, quindi se la directory cambia, i nomi che FOR ottiene anche _may_ cambiano, sebbene questo dipende da diversi fattori. 'FOR/F %% F ... in ('DIR') ...' _prima_ esegue il comando DIR e _quindi ottiene i nomi dei file dall'elenco generato da esso. Si noti che il modulo/F richiede l'esecuzione di una seconda copia di cmd.exe per eseguire il comando DIR e anche creare un file temporaneo che viene eliminato alla fine. – Aacini

0
@echo off 
echo. 
echo. Add Whatever Prefix... 
echo. 
echo. You Want To Add... 
echo. 
echo. To The Filename... 
echo. 
set /p variable=" > " 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in (' dir /b /a-d *.pdf') do (
    set oldName=%%a 
    Set newName=%variable%!oldName! 
    Ren "!oldName!" "!newName!" 
) 
exit 

Questo metodo funziona bene ..... provarlo ... No Doppia prefisso ... Mai.