diff --git commands/core/archive.drush.inc commands/core/archive.drush.inc
index 68ae89f..5ece92a 100644
--- commands/core/archive.drush.inc
+++ commands/core/archive.drush.inc
@@ -36,16 +36,45 @@ function archive_drush_command() {
 function drush_archive_dump($sites_subdirs = '@self') {
   $aliases = drush_sitealias_resolve_sitespecs(explode(',', $sites_subdirs));
   foreach ($aliases as $key => $alias) {
-    $full[$key] = $alias += sitealias_get_databases_from_record($alias);
+    if (($db_record = sitealias_get_databases_from_record($alias))) {
+      $full[$key] = $alias += $db_record;
+    }
+    else {
+      drush_log(dt('DB connections not found for !alias', array('!alias' => $alias)), 'error');
+      return;
+    }
   }
 
-  // User did not pass a specific value for --destination. Make one.
-  if (!$destination = drush_get_option('destination')) {
-    $date = gmdate('Ymd_his');
-    $first = current($full);
-    $prefix = count($sites_subdirs) > 1 ? 'multiple_sites' : $first['default']['default']['database'];
-    $file = "$prefix.$date.tar";
-    //
+  $backup_dir = NULL;
+  $backup_file = NULL;
+  // Validate the user defined destination if one is passed.
+  if ($destination = drush_get_option('destination')) {
+    if (file_exists($destination) || file_exists($destination . '.gz')) {
+      if (!is_dir($destination)) {
+        if (file_exists($destination . '.gz')) {
+          drush_log(dt('Destination file already exists !dest.gz', array('!dest' => $destination)), 'error');
+          return;
+        }
+      }
+      else {
+        $backup_dir = $destination;
+      }
+    }
+    else {
+      $backup_dir = dirname($destination);
+      $backup_file = basename($destination);
+      if (!file_exists($backup_dir)) {
+        if (!drush_mkdir($backup_dir)) {
+          drush_log(dt('Could not create folders structure !folder for !dest', array('!folder' => $backup_dir, '!dest' => $destination)), 'error');
+          return;
+        }
+      }
+      $backup_dir = realpath($backup_dir);
+    }
+  }
+
+  // Autochoose backup path.
+  if (!$backup_dir) {
     drush_include_engine('version_control', 'backup');
     $backup = new drush_pm_version_control_backup();
     // TODO: this standard drush pattern leads to a slightly obtuse directory structure.
@@ -53,11 +82,16 @@ function drush_archive_dump($sites_subdirs = '@self') {
     if (empty($backup_dir)) {
       $backup_dir = "/tmp";
     }
-    $destination = "$backup_dir/$file";
   }
-  else {
-    $destination = realpath($destination);
+
+  // Create filename.
+  if (!$backup_file) {
+    $date = gmdate('Ymd_his');
+    $first = current($full);
+    $prefix = count($sites_subdirs) > 1 ? 'multiple_sites' : $first['default']['default']['database'];
+    $backup_file = "$prefix.$date.tar";
   }
+  $destination = $backup_dir . DIRECTORY_SEPARATOR . $backup_file;
 
   $docroot_path = realpath(drush_get_context('DRUSH_DRUPAL_ROOT'));
   $docroot = basename($docroot_path);
