Salut,
j'essaie de créer un projet de portabilisation. Ce jeu de batchs sera sensé détecter les fichiers ajoutés en dehors du répertoire d'installation d'une appli venant d'être installée (il faut donc checker C:\), et les copier dans un répertoire. Une fois l'application copiée dans un lieu sûr et "désinstallée", deux batch (Quick_Install.bat et Quick_Uninstall.bat) permettront de rebalancer les fameux fichiers systeme externes pour refaire fonctionner l'appli, ou des les supprimer pour ne plus laisser de traces.
Bref, j'ai donc un script qui récupère les chemins de fichiers qui diffèrent sur C:\ entre avant et après une installation.
Ces chemins sont stockés dans un fichier differences.txt.
Je voudrais pouvoir lire differences.txt et copier les fichiers de leur répertoire à un autre en recréant l'arborescence.
Ex (note : j'ai simplifié le répertoire de destination) :
- un fichier se trouve dans C:\WINDOWS\System32\machin.exe
- je le copie vers : "là d'où s'execute le batch"\Files\WINDOWS\System32\machin.exe
Donc : comment faire pour lire un chemin et créer des dossiers suivant ce qui le compose?
Il faudrait aussi que le script puisse analyser le chemin pour copier le tout dans un dossier spécifique*, et aussi ne pas créer TOUS les dossiers-paliers dans certains cas.
Ex :
- un fichier se trouve dans C:\WINDOWS\System32\machin.exe
- alors il sera copié vers "là d'où s'execute le batch"\Files\System\WINDOWS\System32\machin.exe
- un fichier se trouve dans C:\Documents and Settings\*nom d'utilisateur*\Application Data\Truc\machin.exe
- alors il sera copié vers "là d'où s'execute le batch"\Files\User\Application Data\Truc\machin.exe
..............................................................................................................................................
(*) en gros le script doit pouvoir comprendre que :
- s'il y a "Documents and Settings" + *nom d'utilisateur*, le tout sera copié dans un dossier "User" sans créer de dossiers "Document and Settings", ni *nom d'utilisateur*.
- s'il y a "Documents and Settings" sans *nom d'utilisateur* (ex : C:\Documents and Settings\All Users), le tout sera copié dans un dossier "System" (avec création desdits dossiers)
- s'il y a autrechose dans le chemin source (ex : "Program Files", "WINDOWS", ou quoi que ce soit), le tout sera aussi copié dans le dossier "System" (avec création desdits dossiers)
Ensuite le batch Quick_Install se chargera de rebalancer ce qui est dans "Files\User" vers "%UserProfile%", et tout ce qui est dans "Files\System" vers "C:\".
..............................................................................................................................................
Voici un code qui permettait de décortiquer un chemin pour créer à partir de celui-ci un second chemin de manière dynamique.
(J'ai mis "Documents and Settings" comme chemin source, mais bien entendu ce chemin source est sensé changer à chaque nouvelle ligne lue dans differences.txt.)
Ce code ne mache pas, il plante, et j'aimerais savoir pourquoi. J'ai réussi à ne plus le faire planter, mais il m'a fallut virer 70% de son contenu et en réalité je n'ai pas bien réussi à isoler le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 @echo off setlocal enableExtensions set SOURCEPATH=C:\Documents and Settings\BIOman set PATHTMP="%SOURCEPATH:\=" "%" set COPYPATH=%~dp0\Files set num=0 call :getPATH %PATHTMP% echo %COPYPATH% goto end :getPATH if "%~1" neq "" ( set WHATISIT=%WHATISIT%\%~1 if %WHATISIT% equ %SystemRoot% ( set COPYPATH=%~dp0\Files\System ) if %WHATISIT% equ %ProgramFiles% ( set COPYPATH=%~dp0\Files\System ) if %WHATISIT% equ %UserProfile% ( set COPYPATH=%~dp0\Files\Users ) if %num% GEQ "1" ( set COPYPATH=%COPYPATH%\%~1 ) set /A num=num+1 shift goto getPATH ) :end endlocal pause
Partager