Tutos geek

Tutoriaux linux, debian, android et autres

Travailler sur Eclipse avec DisplayFusion activé

07 mars 2017 - Aucun commentaire

DisplayFusion est un super programme qui permet de faire tout un tas de chose pratique dès qu'on possède plus d'un moniteur, comme afficher des fonds d'écran différents sur les deux écrans ou utiliser des raccourcis clavier pour déplacer les fenêtres.
Il est hyper pratique et ergonomique, j'ai même acheté la version payante.

Mais il me posait de gros problème avec Eclipse, l'IDE bien connu des programmeurs. En effet lorsque DisplayFusion était activé j'avais des erreurs dans Eclipse dès que je donnais le focus à l'éditeur de texte. En gros : cliquer sur une classe dans l'arborescence puis cliquer dans la zone d'édition provoquait systématiquement une erreur popup ce qui devenait très très vite énervant.

Unhandled event loop exception. No more handles
Unhandled event loop exception. No more handles.


J'ai finalement trouvé la solution : il faut demander à DisplayFusion de ne pas appliquer les hooks à Eclipse.

  • Lancez Eclipse
  • Ouvrez les paramètres de DisplayFusion
  • Onglet Compatibility
  • Cliquez sur Select application et sélectionnez l'instance d'Eclipse lancée plus haut
  • Cochez Disable Application Hooks (this application only)
  • Validez deux fois avec Ok, redémarrez Eclipse et c'est bon



Sources
https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983


Versions
Windows 7 x64 - SP1
Eclipse Neon.2 Release (4.6.2)
DisplayFusion 8.1.1.0

Lectures croisées : Fondation et Robots

07 février 2017 - 2 commentaires

Un article un peu différent des mes habituels, je vais parler de bouquins. Mais ne vous inquiétez pas, ça reste dans l'univers geek.
J'ai commencé récemment le cycle Fondation d'Isaac Asimov et - au lieu de vous conseiller vivement de le lire (mais je vous conseille quand même vivement de le lire...) - je veux simplement parler de l'ordre de lecture.
Je n'en suis qu'au deuxième tome, les faits que je vais énoncer ne sont pas de moi mais ont été glanés après quelques recherches sur internet.

Les Cycle de Fondation et Cycle des robots sont liés entre eux et terminer un cycle peut spoiler l'autre.

The-Giipsiix du forum de bashfr propose de choisir un cycle, de lire les 3 premiers, puis de lire l'intégralité de l'autre cycle et enfin de finir le premier cycle commencé.



En ce qui concerne les Robots et Fondations je vous conseille vivement de commencer par exemple un des deux cycles (Robots ou Fondation) et de vous arrêter au 3 (où à la limite au 4) de passer à l'autre cycle et de revenir finir celui que vous aviez commencé. Ca vous permettra d'avoir un histoire formidable (encore plus si possible) sans rien vous spoiler (par exemple ne pas lire le dernier de fondation avant d'avoir fini le... 4 je crois des robots, ou bien ne pas lire "prélude à fondation" et lire tout ça après) Croyez moi il n'y a pas de meilleur moyen (à mon humble avis de grand prêtre ordonnateur de la secte des adorateurs d'Asimov) d'entrer dans ce qui est un des plus beau joyaux résultant de l'esprit d'un être humain.
source

le mieux ça aurai été les 3 premier du cycle A (celui de ton choix) puis les 3 ou 4 premier de cycle B (l'autre) et ensuite tu finis fondation ou robot :)
source

Pour mémoire le Cycle Fondation se compose de 3 nouvelles écrites dans les années 50, puis 2 nouvelles dans les années 80 et enfin 2 nouvelles écrites fin 80, début 90 dont les événements se passent chronologiquement avant tout le reste.

  • Fondation (Foundation, 1951) ;
  • Fondation et Empire (Foundation and Empire, 1952) ;
  • Seconde Fondation (Second Foundation, 1953).

  • Fondation foudroyée (Foundation's Edge, 1982) ;
  • Terre et Fondation (Foundation and Earth, 1986) ;

  • Prélude à Fondation (Prelude to Foundation, 1988) ;
  • L'Aube de Fondation (Forward the Foundation, 1993).
source

Et le Cycle des robots regroupe 8 recueils de nouvelles séparés en 2 tomes

Tome 1 : Prélude à Trantor :
  • Nous les robots (recueil de nouvelles)
  • Les Cavernes d'acier
  • Face aux feux du soleil.

Tome 2 : La Gloire de Trantor :
  • Les Robots de l'aube
  • Les Robots et l'Empire
  • Les Courants de l'espace
  • Poussière d'étoiles
  • Cailloux dans le ciel
source

Publié dans :

Ajouter un script home-made au menu contextuel de Windows

06 décembre 2016 - Aucun commentaire

Pour ajouter un script au menu contextuel de Windows (click-droit sur un fichier ou un dossier) il va falloir passer par le registre.
Créez un fichier .reg comme ci-dessous, exécutez-le et les modifications apparaitront instantanément sans avoir besoin de rebooter.



Avant de démarrer, notez que vous pouvez ajouter un script lors d'un click-droit sur :
- Un dossier
- Tous les fichiers
- Un fichier d'un certain type
- Une zone vide dans un dossier (le "directory background")

et qu'il y a une différence assez importante entre :
- Ajouter un script
- Ajouter un sous-menu qui contiendra plusieurs scripts (comme sur ma capture d'écran au dessus)

Juste un script

Ajouter un script sur un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""
Le %1 enverra le chemin complet du dossier sur lequel vous avez cliqué en paramètre.

Ajouter un script sur une zone vide d'un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%V\""
Notez l'utilisation de %V à la place de %1 pour passer le chemin du dossier courant.


Ajouter un script pour tous les fichiers et dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Ajouter un script sur un certain type de fichier

Ici c'est en 2 temps.
Trouvez d'abord le type de fichier auquel vous souhaitez ajouter un script dans HKEY_CLASSES_ROOT Par exemple HKEY_CLASSES_ROOT\.reg
Notez la valeur de la clé, ici regfile, et créer le fichier suivant
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Un sous-menu contenant plusieurs scripts

Je ne vais pas vous remettre tous les cas de figure, vous déduirez sans peine les modification à apporter pour votre utilisation.

Ajouter un sous-menu sur les dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%1\""

A noter qu'en voulant aussi ajouter le sous-menu lors d'un click-droit sur le background d'un dossier je pensais m'en tirer simplement en ajoutant la clé
[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

mais apparemment on ne peut pas faire pointer 2 clés différentes sur le même SubCommands*, j'ai donc du dupliquer tout le fichier .reg et changer NOM_DU_SCRIPT_1 par NOM_DU_SCRIPT_1_BACK pour le résultat suivant :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1_BACK;NOM_DU_SCRIPT_2_BACK"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%V\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%V\""

Pour ajouter une barre de séparation entre 2 scripts ajoutez un pipe.
"SubCommands"="NOM_DU_SCRIPT_1;|;NOM_DU_SCRIPT_2"


*Si quelqu'un a une solution plus élégante je la prend volontiers.


Sources
Superuser
Askvg
Stackoverflow


Version
Windows 7 x64 - SP1

Jouer à Beyond Good & Evil sur Windows 7

06 décembre 2016 - Aucun commentaire

Le jeu Beyond Good & Evil peut subir quelques problèmes lorsqu'on y joue sur Windows 7, comme les cut-scene vidéo qui avancent trop vite et dont le son est décalé, ou les icônes d'action qui clignotent dans tous les sens.
J'ai modifié certains paramètres Nvidia afin de les résoudre.

Ouvrez le panneau de contrôle Nvidia via le menu Windows, Control panel, Nvidia Control panel.
Allez au menu 3D Settings, Manage 3D settings, onglet Program Settings et sélectionnez BGE. Chez moi il s'appelait "BANG! - gunship Elite(bge.exe)"

Icônes qui s'affolent

Passez l'anti-aliasing sur 2 et l'antialiasing - mode sur override any application setting

Vidéo trop rapide / son décalé

Modifiez vertical sync sur adaptative (half refresh rate)

Normalement ça devrait suffire à rendre le jeu fluide, mais en cas de doute j'ai modifié tous les paramètres pour prendre la plus petite valeur possible à chaque fois.
Faites vos propres tests.










source : gogwiki


Versions
Windows 7 x64 - SP1
Beyond Good & Evil 1.1

Carte graphique
GeForce GTX 670
Driver 375.95
DirectX 11
Nvidia GeForce Experience 3.1.2.31

Connexion VPN entre un client Windows et un serveur Linux

10 août 2016 - Aucun commentaire

Il va falloir installer OpenVPN sur votre serveur Linux et générer les certificats puis installer le client OpenVPN sur votre machine Windows.

Sur Linux (serveur)

Mon debian se fait vieux et les nouvelles versions des programmes ne sont plus forcément supportées.
J'ai trouvé un version d'OpenVPN sur le repository suivant

Repository

vi /etc/apt/sources.list
deb http://archive.debian.org/debian squeeze main
deb http://archive.debian.org/debian squeeze-lts main

vi /etc/apt/apt.conf
Acquire::Check-Valid-Until false;

apt-get upgrade
apt-get update

Installation d'OpenVPN

apt-get install openvpn
apt-get install network-manager-openvpn-gnome

Génération des certificats d'OpenVPN

mkdir /etc/openvpn/easy-rsa/
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
#passer en root
su -
cd /etc/openvpn/easy-rsa
. ./vars
./clean-all
./build-ca
./build-key-server server
./build-key client1
./build-dh
exit

cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn

Configuration

vi /etc/openvpn/tun0.conf
Fichier complet

Paramètres importants :
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
push "redirect-gateway def1 bypass-dhcp" # pour rerouter tout le trafic internet
push "dhcp-option DNS 10.8.0.1"

Lancer le VPN

openvpn --config /etc/openvpn/tun0.conf --verb 6

Rerouter tout le trafic internet

Pour l'instant il ne sera possible que de communiquer entre le client et le serveur.
Pour rerouter tout le trafic internet il faut le spécifier via une règle IPTable.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
10.8.0.0 est le sous-réseau créé précédemment et eth0 le nom de la carte réseau de votre serveur par lequel passe le trafic internet.

Si vous voulez voir les règles nat existantes :
iptables -t nat -L -n -v

Sur Windows (client)

Copier les fichiers ca.crt, client1.crt et client1.key sur la machine locale dans le répertoire [OpenVPN]\config\
Modifier le nom de l'interface réseau "Local Area Connection X" en "tap0" dans "Control Panel\Network and Internet\Network Connections"
Modifier l'interface réseau en désactivant l'IPv6 (sinon ça va saturer de warning, notre version d'OpenVPN ne gérant pas encore l'IPv6)

Configuration

Créer un fichier .ovpn dans [OpenVPN]\config\
Fichier complet

Paramètres importants :
client
dev tap
dev-node "tap0"
ca ca.crt
cert client1.crt
key client1.key
Lancer le client OpenVPN et se connecter


Source : OpenVPN


Version
Windows 7 x64 - SP1
Debian : 6.0.10 (squeeze)

Synology DS415+ : Changer le répertoire par défaut de Photo station

11 mai 2016 - Aucun commentaire

J'ai récemment acheté un NAS Synology DS415+ afin d'y stocker ma musique, mes photos et mes vidéos, attendez-vous donc à plusieurs posts dédiés à cette plateforme, je suis en plein paramétrage.

Première déconvenue : L'application Photo station ne permet pas de paramétrer l'endroit où sont stocké les photos, une hérésie !
Par défaut il regarde dans /volume1/photo
On doit surement pouvoir bidouiller des fichiers de configuration utilisés par l'appli pour modifier ça, mais la solution simple (mais temporaire ?) que j'ai retenu était de faire un lien symbolique vers mes photos.

Tout d'abord arrêtez le processus, pour cela rendez-vous, depuis l'interface web, dans le Centre de paquet, sélectionnez Photo station, bouton Action, Stop.


Ensuite, depuis le panneau de configuration, Dossiers partagés, supprimez le répertoire "photo".


Accédez au NAS en SSH (depuis Putty par exemple) et rendez vous dans le volume où vous souhaitez stocker vos photo, par exemple volume1, puis créez un lien symbolique pointant sur votre dossier actuel.
cd /volume1
sudo ln -s /volume1/DOSSIER_PHOTO photo
sudo chmod -R 777 /volume1/DOSSIER_PHOTO
Important, mettez les droits à 777 sur la racine du dossier de photo, se contenter de les mettre sur le lien symbolique n'aura pas d'effet.


Sources
https://forum.synology.com/enu/viewtopic.php?t=68474


Version
Synology DS415+
DSM 6.0-7321 Update 6

Forcer un mode d'affichage (portrait, paysage) sur Android

31 mars 2016 - Aucun commentaire

La version de CyanogenMOD que j'ai installé sur ma tablette Samsung Galaxy Tab Pro 12 est géniale mais elle souffre d'un défaut : la rotation automatique de l'écran ne fonctionne pas.
C'est un bug connu et je crois qu'ils ne l'ont toujours pas réglé.

Pour palier au problème il existe la petite application Set Orientation

Elle ne demande aucune permission en particulier et fonctionne a merveille.
Le très léger défaut que je lui trouve c'est qu'elle ne garde pas en mémoire les dernières orientations utilisées, il faut à chaque fois scroller pour trouver la bonne.

Activer VT-x/AMD-V pour installer un OS 64 bits dans une VM

09 mars 2016 - Aucun commentaire

En voulant installer une Debian x64 dans une machine virtuelle depuis Windows 7 j'ai obtenu ce message d'erreur : VT-X/AMD-V hardware acceleration has been enabled, but is not operational. Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer


BIOS

Il faut donc aller dans le BIOS pour activer la fonctionnalité correspondante.
Je possède une carte mère Asus P8Z77-Deluxe, le BIOS pourrait être différent chez vous si vous n'avez pas le même modèle.

1. Rebootez et entrez dans le BIOS.
2. Passez en mode avancé.


3. Entrez dans l'onglet Advanced
4. Allez sur CPU Configuration



5. Activez Intel Virtualization Technology



6. Sauvegarder, quittez et, très important, éteignez complètement votre ordinateur !
Un simple reboot ne prendra pas en compte l'activation de la virtualisation.

Pendant mes pérégrinations sur internet j'ai noté que deux autres choses pouvaient empêcher la machine virtuelle d'utiliser l'accélération matérielle : Hyper-v ou l'antivirus.

Hyper-v

Hyper-v est une fonctionnalité Windows qui empêche les processus d'utiliser l'accélération matérielle.
Pour le supprimer,
1. Ouvrez le panneau de configuration
2. Allez dans Programs and Features
3. Cliquez sur Turn Windows features on or off
4. Décochez Hyper-v si vous le trouvez (moi je ne l'avais pas)


Antivirus

Avast peut éventuellement empêcher d'utiliser l'accélération matérielle, cherchez dans les paramètres et décochez "Enable Hardware-assisted Virtualization" ("activer l'assistance a la virtualisation").


Sources
BIOS
Hyper-v
Hard reboot
Avast


Versions
Carte mère : Asus P8Z77-Deluxe
Bios : 2.10.1208
Oracle VM Virtualbox : 4.2.10
Windows 7 x64 - SP1

Jouer avec des manettes PS3 sur Windows

04 mars 2016 - 2 commentaires

1. Installer les drivers Xbox en 1er, DS3 Tool va se servir de ceux-ci. (via Microsoft, via pumbaa.ch)
File: Xbox360_64Eng.exe
   CRC-32: 04f0468f
   MD4: f6fbefc0e1c7e3032b6b5338f6613f03
   MD5: 4c7fbad5bbebc0d3807129092a1de4b9
   SHA-1: 00f7246437c53f3aba5516ac3fc572181c24c666

2. Installer DS3 Tool (via xinputer, via pumbaa.ch)
File: MotioninJoy_071001_signed.exe
   CRC-32: 1e840493
   MD4: 6b14396f91e0a087b6c3cf6f39f1fe8e
   MD5: 5ae1bf5713cf1f0d682561d34779214d
   SHA-1: 2d1c95e94b86e2a465ce6e39858ab612dc2fafd5

3. Lancer DS3 Tool

4. Brancher la (les) manette(s) avec le câble USB (je ferai un 2ème tuto avec bluetooth si j'y arrive)

5. Dans Driver Manager, sélectionner les manettes et cliquer sur Load drivers.
Windows va mettre un message d'alerte qu'il faut accepter.
Après un petit temps d'attente vous devriez voir un Vu s'afficher à droite.


6. Dans Profiles, sélectionner une manette et cliquer sur Enable pour que joysticks fonctionnent. Recommencer pour chaque manette.


Notez qu'une fois l'installation terminée il ne semble pas requis que DS3 Tool soit lancé pour que les manettes fonctionnent.


Sources
JV #17, page 72


Versions
Windows 7 x64 - SP1 ENG
DS3 Tool 0.7.1001
Driver XBox : Xbox 360 Accessories Software 1.2

Créer un zip en ligne de commande

15 février 2016 - Aucun commentaire

Je cherchais un moyen de créer un fichier zip sous Windows sans passer par un programme tiers (java, exe, python, ...).
Je pensais y arriver uniquement en batch mais en fait il faut faire quelques lignes de VB Script.

Le fichier batch :
@echo off

REM ----- Setup -----
set SRC_DIR=C:\Temp\FolderToZip\
set VBS_FILE=.\zipIt.vbs
set ARCHIVE_FOLDER=c:\Temp\
mkdir %ARCHIVE_FOLDER% 2> nul
set DATE_TIME=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%
set ZIP_FILE="%ARCHIVE_FOLDER%folderZipped_%DATE_TIME%.zip"
REM ------ end -------

REM ----- Execute VBS file (creating ZIP file) -----
CScript %VBS_FILE% %SRC_DIR% %ZIP_FILE%

Le fichier VBS : zipIt.vbs
REM Récupération des arguments
Set args = WScript.Arguments
srcFolder = args(0) REM Dossier source, à zipper
zipFilePath = args(1) REM Chemin du fichier zip à créer

REM Récupération des chemins absolus
set fso = CreateObject("Scripting.FileSystemObject")
srcFolder = fso.GetAbsolutePathName(srcFolder)
zipFilePath = fso.GetAbsolutePathName(zipFilePath)

REM Magie noire...
REM Création du fichier zip (vide)
CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFilePath, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)

Set objShell = CreateObject("Shell.Application")
Set zip = objShell.NameSpace(zipFilePath)
Set source = objShell.NameSpace(srcFolder)

REM REMplissage du fichier zip
REM Malheureusement cette opération est non-bloquante
zip.CopyHere source.Items

REM il faut donc attendre jusqu'à qu'elle soit terminée.
REM Pour cela on boucle tant que le nombre de fichiers dans le zip n'est pas égal au nombre de fichiers dans le dossier source.
REM http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript
Do Until zip.Items.Count = source.Items.Count
    WScript.Sleep 100
    WScript.Echo "Copie en cours : " & zip.Items.Count & "/" & source.Items.Count
Loop

Pour une raison que j'ignore le script échoue si la source contient, quelque part dans sa hiérarchie, un dossier vide.
J'obtiens le message suivant :
Windows was unable to add one or more empty directories to the Compressed (zipped) Folder.

Si quelqu'un peut m'expliquer pourquoi ou comment y remédier, ça serait sympa.

Si vous voulez un seul fichier qui fasse tout ça il est possible de créer le fichier VBS à la volée, l'exécuter puis le détruire :

@echo off

REM ----- Setup -----
set SRC_DIR=C:\Temp\FolderToZip\
set VBS_FILE=.\zipIt.vbs
set ARCHIVE_FOLDER=c:\Temp\
mkdir %ARCHIVE_FOLDER% 2> nul
set DATE_TIME=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%
set ZIP_FILE="%ARCHIVE_FOLDER%folderZipped_%DATE_TIME%.zip"
REM ------ end -------

REM ------ Création du fichier VBS à chaud -----
REM Récupération des arguments
echo Set args = WScript.Arguments>%VBS_FILE%
echo srcFolder = args(0)>>%VBS_FILE% REM Dossier source, à zipper
echo zipFilePath = args(1)>>%VBS_FILE% REM Chemin du fichier zip à créer

REM Récupération des chemins absolus
echo set fso = CreateObject("Scripting.FileSystemObject")>>%VBS_FILE%
echo srcFolder = fso.GetAbsolutePathName(srcFolder)>>%VBS_FILE%
echo zipFilePath = fso.GetAbsolutePathName(zipFilePath)>>%VBS_FILE%

REM Magie noire...
REM Création du fichier zip (vide)
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFilePath, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar)>>%VBS_FILE%

echo Set objShell = CreateObject("Shell.Application")>>%VBS_FILE%
echo Set zip = objShell.NameSpace(zipFilePath)>>%VBS_FILE%
echo Set source = objShell.NameSpace(srcFolder)>>%VBS_FILE%

REM REMplissage du fichier zip
REM Malheureusement cette opération est non-bloquante
echo zip.CopyHere source.Items>>%VBS_FILE%

REM il faut donc attendre jusqu'à qu'elle soit terminée.
REM Pour cela on boucle tant que le nombre de fichiers dans le zip n'est pas égal au nombre de fichiers dans le dossier source.
REM http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript
echo Do Until zip.Items.Count = source.Items.Count>>%VBS_FILE%
echo 	WScript.Sleep 100>>%VBS_FILE%
echo 	WScript.Echo "Copie en cours : " ^& zip.Items.Count ^& "/" ^& source.Items.Count>>%VBS_FILE%
echo Loop>>%VBS_FILE%
REM ------ end -------

REM ----- Execute VBS file (creating ZIP file) -----
CScript %VBS_FILE% %SRC_DIR% %ZIP_FILE%

REM ----- Suppression du fichier VBS ------
del %VBS_FILE%

Notez le caractère d'échappement "^" utilisé pour échapper les "&" à écrire dans le fichier.


Source
Création du zip : http://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili
Attendre que la création du zip se termine : http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript

Publié dans :