No entiendo por qué no puede usar un archivo por lotes. Pero aquí hay una solución que debería funcionar con la mayoría de los nombres de archivos.
crítico - primero hay que asegurarse de que tiene un nombre de variable no definida, voy a utilizar fnombre
set "fname="
El siguiente es el comando para hacer realidad el cambio de nombre. No funcionará correctamente si fname ya está definido.
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
La variable fname se define para cada iteración y luego la sintaxis %fname:*prefix=%
sustituye a la primera ocurrencia de "prefijo" con nada. Lo complicado es que Windows intenta primero expandir% fname% cuando el comando se analiza por primera vez. Por supuesto, eso no funcionará porque aún no se ha definido. En la línea de comandos, los porcentajes se conservan si no se encuentra la variable. La llamada provoca una fase de expansión adicional que ocurre después de la variable se ha establecido, por lo que la expansión funciona.
Si se define fname antes de ejecutar el comando, simplemente intentará cambiar el nombre del mismo archivo para cada iteración en lugar del valor que se le asigna dentro del ciclo.
Si desea ejecutar nuevamente el comando con un prefijo diferente, primero deberá borrar la definición.
EDITAR - Aquí es un archivo por lotes denominado "RemovePrefix.bat" que hace el trabajo
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
Supongamos que había nombrado como archivos "prefixName.txt"
, entonces deberías usar la secuencia de comandos mediante la ejecución de
RemovePrefix "prefix" "*.txt"
El archivo por lotes cambiará el nombre de los archivos en su directorio actual. El archivo por lotes también tendrá que estar en su directorio actual a menos que el archivo por lotes exista en un directorio que esté en su variable PATH. O puede especificar la ruta completa al archivo de proceso por lotes cuando lo llame.
Las reglas para la expansión son diferentes en un archivo por lotes.PARA las variables se debe hacer referencia como %% A en lugar de% A, y %% fname %% no se expande inicialmente, en cambio los porcentajes dobles se convierten en porcentajes individuales y luego% fname% se expande después de la LLAMADA. No importa si fname ya está definido con el archivo por lotes. SETLOCAL hace que la definición de fname sea temporal (local) en el archivo por lotes.
Estos comandos ni siquiera parecen funcionar bien con directorios muy grandes. Sigue añadiendo prefijo a los archivos en los que ya ha agregado el prefijo. – hnviet