Voici comment vous pouvez le faire dans le lot (au cas où vous êtes curieux). La grande limite est que si vous avez des noms de fichiers avec plus d'un signe de pourcentage, cela ne fonctionnera pas parce que le shell l'étend à une variable. Je ne sais pas immédiatement comment résoudre ce problème.
Il commence à partir du répertoire dans lequel se trouve le script et fonctionne de manière récursive sur tous les sous-répertoires.
@echo off
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%N in (`dir /s /b`) do (
set var=%%~nN
set var=!var:^&= !
set var=!var:%%= !
if not "!var!"=="%%~nN" (
if not exist "%%~dpN!var!%%~xN" (
echo "%%N" --^> "!var!%%~xN"
ren "%%N" "!var!%%~xN"
) else (
echo File "!var!%%~xN" ^(from %%N^) already exists.
)
)
)
Par ex, les impressions sortie comme ceci:
C:\batch\schar>schar
"C:\batch\schar\Test%doc.doc" --> "Test doc.doc"
"C:\batch\schar\Test%doc.pdf" --> "Test doc.pdf"
File "Test doc.pdf" (from C:\batch\schar\Test&doc.pdf) already exists.
"C:\batch\schar\subdir\FILE%here" --> "FILE here"
Pourquoi un fichier batch? – CodesInChaos
Le dossier se trouve sur un serveur distant auquel je n'ai pas accès. Donc, je veux donner à la personne qui a accès un script qui peut juste être couru une fois. –
Je suppose qu'il ne doit pas être un fichier batch. Ce pourrait être un vbscript ou quelque chose de similaire. Je vais mettre à jour la question. –