diff --git a/nhentai/cmdline.py b/nhentai/cmdline.py
index 67140cd..c7246d2 100644
--- a/nhentai/cmdline.py
+++ b/nhentai/cmdline.py
@@ -89,6 +89,7 @@ def cmd_parser():
     parser.add_option('--file',  '-f', type='string', dest='file', action='store', help='read gallery IDs from file.')
     parser.add_option('--format', type='string', dest='name_format', action='store',
                       help='format the saved folder name', default='[%i][%a][%t]')
+    parser.add_option('--dry-run', '-r', action='store_true', dest='dryrun', help='Dry run, skip file download.')
 
     # generate options
     parser.add_option('--html', dest='html_viewer', action='store_true',
@@ -214,4 +215,8 @@ def cmd_parser():
         logger.critical('Maximum number of used threads is 15')
         exit(1)
 
+    if args.dryrun and (args.is_cbz or args.is_pdf):
+        logger.critical('Cannot generate PDF or CBZ during dry-run')
+        exit(1)
+
     return args
diff --git a/nhentai/command.py b/nhentai/command.py
index bc987fb..92b6793 100644
--- a/nhentai/command.py
+++ b/nhentai/command.py
@@ -89,9 +89,10 @@ def main():
                                 timeout=options.timeout, delay=options.delay)
 
         for doujinshi in doujinshi_list:
+            if not options.dryrun:
+                doujinshi.downloader = downloader
+                doujinshi.download()
 
-            doujinshi.downloader = downloader
-            doujinshi.download()
             if options.is_save_download_history:
                 with DB() as db:
                     db.add_one(doujinshi.id)
diff --git a/nhentai/utils.py b/nhentai/utils.py
index 9b2b706..eeae3de 100644
--- a/nhentai/utils.py
+++ b/nhentai/utils.py
@@ -74,6 +74,13 @@ def generate_html(output_dir='.', doujinshi_obj=None, template='default'):
     else:
         doujinshi_dir = '.'
 
+    if not os.path.exists(doujinshi_dir):
+        logger.warning('Path \'{0}\' does not exist, creating.'.format(doujinshi_dir))
+        try:
+            os.makedirs(doujinshi_dir)
+        except EnvironmentError as e:
+            logger.critical('{0}'.format(str(e)))
+
     file_list = os.listdir(doujinshi_dir)
     file_list.sort()
 
@@ -198,7 +205,7 @@ def generate_cbz(output_dir='.', doujinshi_obj=None, rm_origin_dir=False, write_
 def generate_pdf(output_dir='.', doujinshi_obj=None, rm_origin_dir=False):
     try:
         import img2pdf
-        
+
         """Write images to a PDF file using img2pdf."""
         if doujinshi_obj is not None:
             doujinshi_dir = os.path.join(output_dir, doujinshi_obj.filename)
@@ -224,7 +231,7 @@ def generate_pdf(output_dir='.', doujinshi_obj=None, rm_origin_dir=False):
             shutil.rmtree(doujinshi_dir, ignore_errors=True)
 
         logger.log(15, 'PDF file has been written to \'{0}\''.format(doujinshi_dir))
-        
+
     except ImportError:
         logger.error("Please install img2pdf package by using pip.")