J'utilise Win-10 64-bit.
Compte tenu de la structure de répertoire suivante sur ma machine Windows...
c:\tmp\Logs_UAT\
'-> folder1
| '-> test.txt
'-> folder2
'-> test.txt
...J'essaie de renommer tous les fichiers dans chaque répertoire en les préfixant avec le nom du répertoire, pour avoir :
c:\tmp\Logs_UAT\
'-> folder1
| '-> folder1_test.txt
'-> folder2
'-> folder2_test.txt
Pour ce faire, je fais une boucle récursive à travers les fichiers du répertoire %basedir%
J'utilise FOR et dans chaque répertoire, j'obtiens le nom du répertoire actuel en utilisant la "boucle" FOR interne, puis je renomme le répertoire. Cependant, le répertoire courant n'est généralement pas dérivé correctement. Voici le fichier .bat qui permet de reproduire le problème :
@echo off
set basedir=c:\tmp\Logs_UAT
for /R %basedir% %%I in (*) DO (
cd %%~pI
for %%G in (.) do echo %%~nxG> temp.temp
set /P curdir=<temp.temp
del /f temp.temp
echo.
echo -------------------
echo %%I
dir
echo %curdir%
echo -------------------
)
Il produit la même valeur pour %curdir%
pour les deux dossiers :
C:\tmp>test.bat
-------------------
c:\tmp\Logs_UAT\folder1\test.txt
Datenträger in Laufwerk C: ist OSDisk
Volumeseriennummer: D280-2DC0
Verzeichnis von C:\tmp\Logs_UAT\folder1
06.05.2020 19:29 <DIR> .
06.05.2020 19:29 <DIR> ..
06.05.2020 19:02 0 test.txt
1 Datei(en), 0 Bytes
2 Verzeichnis(se), 291.684.151.296 Bytes frei
folder2
-------------------
.
-------------------
c:\tmp\Logs_UAT\folder2\test.txt
Datenträger in Laufwerk C: ist OSDisk
Volumeseriennummer: D280-2DC0
Verzeichnis von C:\tmp\Logs_UAT\folder2
06.05.2020 19:29 <DIR> .
06.05.2020 19:29 <DIR> ..
06.05.2020 19:02 0 test.txt
1 Datei(en), 0 Bytes
2 Verzeichnis(se), 291.684.151.296 Bytes frei
folder2
-------------------
C:\tmp\Logs_UAT\folder2>
J'ai essayé :
- Fenêtre de console fraîche
- Console et fichier batch
- Je reçois parfois le premier nom de dossier et parfois le second.
- Nombreuses recherches sur l'internet
Je préférerais m'en tenir aux utilitaires Windows standard car je dois distribuer le script à d'autres utilisateurs qui n'ont peut-être pas le logiciel supplémentaire.
Comment obtenir le nom du répertoire courant dans une invite de commande Windows à l'intérieur de boucle for ?