J'écris un fichier pour supprimer les espaces des noms de fichiers dans un dossier, puis mettre le résultat dans un fichier .txt
. Je viens d'obtenir un résultat de "Echo est sur." encore et encore.
C'est ce que j'ai jusqu'ici:
@echo ON
SET LOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=%var%
set MyVar=%MyVar: =%
echo %MyVar%>>text.txt
)
Quelqu'un peut-il me dire ce qui ne va pas?
Si vous obtenez ECHO is on.
, c’est parce que l’expansion différée n’a pas été utilisée, ce qui a entraîné l’insertion de la valeur de %var%
et de %MyVar%
avant l’exécution de la commande for
. le echo %MyVar%>>text.txt
a été exécuté, il a été interprété comme echo >>text.txt
. Lorsque echo est exécuté sans aucun argument, il indique si echo est activé ou non, ce que vous obtenez dans text.txt
.
Pour résoudre le problème, vous devez faire deux choses:
Premièrement, il y a quelque chose qui ne va pas avec votre deuxième ligne. Il n'y a pas d'espace entre set et local dans setlocal
. La deuxième ligne devrait être SETLOCAL EnableDelayedExpansion
.
Deuxièmement, pour utiliser l’extension différée, vous devez remplacer tous les %
s de chaque variable par !
, comme !var!
au lieu de %var%
.
Résultat final:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
En réalité, vous n'avez pas besoin d'utiliser une variable temporaire dans ce cas, vous pouvez simplement faire SET MyVar=%%~n#
et passer à set MyVar=!MyVar: =!
.
Il est possible de supprimer tous les espaces (pas seulement les espaces de début et de fin) sans utiliser setlocal enabledelayedexpansion
avec la ligne suivante:
set var=%var: =%
Cela fonctionne en remplaçant tous les espaces de la chaîne par la chaîne vide.
Source: DOS - Manipulation de chaînes
La mauvaise chose est que vous avez activé le développement de variable (vous l'avez mal écrit ...) et que vous ne l'utilisez pas, lorsque vous utilisez enabledelayedexpansion, vous devez écrire les noms de variable comme ceci:! Variable! au lieu de cela:% Variable%
Mais vous n'avez pas besoin de l'utiliser avec ce code:
@echo ON
For %%# in (*) do (
SET "var=%%~n#"
Call Set "MyVar=%%var: =%%"
Call echo %%MyVar%%>>text.txt
)
Exécuter le lot suivant dans le dossier contenant les fichiers à renommer
@echo off
setlocal enabledelayedexpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename=.=_!
set filename=!filename= =_!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
vous avez juste besoin d'ajouter l'impression au format txt