2016-07-14 6 views
-3

Dies ist ein Stapelskript, mit dem httpserver in jedem Laufwerkspfad ausgeführt wird, wenn ein Laufwerk vorhanden ist, um seine Dateien aufzulisten. in diesem Skript funktioniert set /a %port% nicht.Batch: wie http-Server in jedem Laufwerkspfad ausführen?

@echo off 
set /a port=8080 
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%i: (
cd /d %%i:\ 
start SimpleHTTPServer.exe %port% 
set /a port+=1 
) 
+1

Wie wäre es Patchen '' SimpleHTTPServer.exe' JustSlightlyMoreComplicatedHTTPServer.exe' zu ​​erstellen, die tatsächlich mehrere Verzeichnisse von einem Prozess dienen kann. – Kaz

+1

Mögliches Duplikat von [Windows Batch-Variablen werden nicht gesetzt] (http://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) – SomethingDark

+3

Auch -1, bis Sie eine sinnvollere Frage stellen als " Warum funktioniert es nicht? " – SomethingDark

Antwort

1

Dies hat damit zu tun, wie Umgebungsvariablen innerhalb von Blöcken in einer Batch-Datei erweitert werden. Um dieses Verhalten zu überschreiben, verwenden Sie setlocal enabledelayedexpansion und verwenden Sie ! anstelle von %, um auf die Umgebungsvariable zu verweisen.

@echo off 
setlocal enabledelayedexpansion 
set /a port=8080 
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%i: (
cd /d %%i:\ 
start SimpleHTTPServer.exe !port! 
set /a port+=1 
) 
+0

Vielen Dank Kumpel, so nett von dir! –