Non capisco perché non è possibile utilizzare un file batch. Ma ecco una soluzione che dovrebbe funzionare con la maggior parte dei nomi di file.
critico - prima è necessario assicurarsi di avere un nome di variabile non definita, userò fname
set "fname="
successivo è il comando per effettivamente fare la ridenominazione. Non funzionerà correttamente se fname è già definito.
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
La variabile fname è definita per ogni iterazione e quindi la sintassi %fname:*prefix=%
sostituisce la prima occorrenza di "prefisso" con niente. La cosa complicata è che Windows tenta prima di espandere% fname% quando il comando viene analizzato per la prima volta. Certo che non funzionerà perché non è stato ancora definito. Sulla riga di comando le percentuali vengono conservate se la variabile non viene trovata. Il CALL causa una fase di espansione aggiuntiva che si verifica dopo la variabile è stata impostata, quindi l'espansione funziona.
Se fname è definito prima dell'esecuzione del comando, tenterà semplicemente di rinominare lo stesso file per ogni iterazione anziché il valore che viene assegnato all'interno del ciclo.
Se si desidera eseguire di nuovo il comando con un prefisso diverso, sarà necessario cancellare nuovamente la definizione.
EDIT - Ecco un file batch denominato "RemovePrefix.bat" che fa il lavoro
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
Supponete di avere file di nome come "prefixName.txt"
, allora si dovrebbe utilizzare lo script eseguendo
RemovePrefix "prefix" "*.txt"
Il file batch rinominerà i file nella directory corrente. Il file batch dovrà anche essere nella directory corrente, a meno che il file batch non esista in una directory che si trova nella variabile PATH. Oppure puoi specificare il percorso completo del file batch quando lo chiami.
Le regole per l'espansione sono diverse in un file batch.Le variabili FOR devono essere referenziate come %% A anziché% A, e %% fname %% non viene espansa inizialmente, ma le percentuali doppie vengono convertite in percentuali singole e quindi% fname% viene espanso dopo CALL. Non importa se fname è già definito con il file batch. SETLOCAL rende la definizione di fname temporanea (locale) nel file batch.
Questi comandi non sembrano funzionare correttamente con directory di grandi dimensioni. Continua ad aggiungere il prefisso ai file a cui ha già aggiunto il prefisso. – hnviet