diff --git a/unix/main.c b/unix/main.c
index 7c3fbf6aa1530f7c678d2c674363f4553af73862..26736e4318dbaf3f0fb204ac5a194294b44a6ad7 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -261,6 +261,12 @@ void pre_process_options(int argc, char **argv) {
     }
 }
 
+#ifdef _WIN32
+#define PATHLIST_SEP_CHAR ';'
+#else
+#define PATHLIST_SEP_CHAR ':'
+#endif
+
 int main(int argc, char **argv) {
     volatile int stack_dummy;
     stack_top = (char*)&stack_dummy;
@@ -281,7 +287,7 @@ int main(int argc, char **argv) {
         path = "~/.micropython/lib:/usr/lib/micropython";
     }
     uint path_num = 1; // [0] is for current dir (or base dir of the script)
-    for (char *p = path; p != NULL; p = strchr(p, ':')) {
+    for (char *p = path; p != NULL; p = strchr(p, PATHLIST_SEP_CHAR)) {
         path_num++;
         if (p != NULL) {
             p++;
@@ -293,7 +299,7 @@ int main(int argc, char **argv) {
     path_items[0] = MP_OBJ_NEW_QSTR(MP_QSTR_);
     char *p = path;
     for (int i = 1; i < path_num; i++) {
-        char *p1 = strchr(p, ':');
+        char *p1 = strchr(p, PATHLIST_SEP_CHAR);
         if (p1 == NULL) {
             p1 = p + strlen(p);
         }