diff --git a/commands/core/archive.drush.inc b/commands/core/archive.drush.inc
index 933681b..91b4c41 100644
--- a/commands/core/archive.drush.inc
+++ b/commands/core/archive.drush.inc
@@ -61,6 +61,7 @@ function archive_drush_command() {
  * Command callback. Generate site archive file.
  */
 function drush_archive_dump($sites_subdirs = '@self') {
+  $tar = drush_get_tar_executable();
   $full = array();
   $aliases = drush_sitealias_resolve_sitespecs(explode(',', $sites_subdirs));
   foreach ($aliases as $key => $alias) {
@@ -161,9 +162,9 @@ function drush_archive_dump($sites_subdirs = '@self') {
   $docroot = basename($docroot_path);
   $workdir = dirname($docroot_path);
   // Archive Drupal core, excluding sites dir.
-  drush_shell_cd_and_exec($workdir, "tar --exclude '{$docroot}/sites' --dereference -cf %s %s", $destination, $docroot);
+  drush_shell_cd_and_exec($workdir, "$tar --exclude %s --dereference -cf %s %s", $docroot . '/sites', $destination, $docroot);
   // Add sites/all to the same archive.
-  drush_shell_cd_and_exec($workdir, "tar --dereference -rf %s %s", $destination, "{$docroot}/sites/all");
+  drush_shell_cd_and_exec($workdir, "$tar --dereference -rf %s %s", $destination, $docroot . '/sites/all');
 
   $tmp = drush_tempdir();
   // Dump the database(s) for each site and add to the archive.
@@ -175,7 +176,7 @@ function drush_archive_dump($sites_subdirs = '@self') {
       $table_selection = drush_sql_get_table_selection();
       list($dump_exec, $dump_file) = drush_sql_build_dump_command($table_selection, $target['default'], $result_file);
       drush_shell_exec($dump_exec);
-      drush_shell_cd_and_exec($tmp, 'tar --dereference -rf %s %s', $destination, basename($result_file));
+      drush_shell_cd_and_exec($tmp, "$tar --dereference -rf %s %s", $destination, basename($result_file));
     }
   }
 
@@ -196,7 +197,7 @@ function drush_archive_dump($sites_subdirs = '@self') {
 
     // Add the site specific directory to archive.
     if (!empty($status['object']['%paths']['%site'])) {
-      drush_shell_cd_and_exec($workdir, "tar --dereference -rf %s %s", $destination,  "{$docroot}/sites/" . basename($status['object']['%paths']['%site']));
+      drush_shell_cd_and_exec($workdir, "$tar --dereference -rf %s %s", $destination, $docroot . '/sites/' . basename($status['object']['%paths']['%site']));
     }
 
     $site = array(
@@ -220,7 +221,7 @@ function drush_archive_dump($sites_subdirs = '@self') {
   file_put_contents("{$tmp}/MANIFEST.ini", $contents);
 
   // Add manifest to archive.
-  drush_shell_cd_and_exec($tmp, 'tar --dereference -rf %s %s', $destination, "MANIFEST.ini");
+  drush_shell_cd_and_exec($tmp, "$tar --dereference -rf %s %s", $destination, "MANIFEST.ini");
 
   // Compress the archive
   drush_shell_exec("gzip --no-name -f %s", $destination);
diff --git a/includes/environment.inc b/includes/environment.inc
index 4445630..ccd2254 100644
--- a/includes/environment.inc
+++ b/includes/environment.inc
@@ -649,6 +649,13 @@ function _drush_test_os($os, $os_list_to_check) {
   return FALSE;
 }
 
+/*
+ * Return tar executable name specific for the current OS 
+ */
+function drush_get_tar_executable() {
+  return drush_is_windows() ? "bsdtar" : "tar";
+}
+
 /**
  * Read the drush info file.
  */
