How do I make archives.php for one category only?

First: don’t use query_posts(), ever.

Second, to create a category archive index page template for a specific category, refer to the Codex entry for the Template Hierarchy:

  • category-{slug}.php
  • category-{id}.php
  • category.php
  • archive.php
  • index.php

So, if you have a category, 'foobar', with a category ID of 1, you could do either of the following:

  • category-foobar.php
  • category-1.php

And WordPress will use that template to render the archive index page for that category.

The reason your query is getting stomped has nothing to do with your template file, however; it is because you’re completely overriding the default query, by using query_posts().

To filter your date-based archives by a specific category, use pre_get_posts instead:

function wpse75668_filter_pre_get_posts( $query ) {
    // Only modify the main loop query
    // on the front end
    if ( $query->is_main_query() && ! is_admin() ) {
        // Only modify date-based archives
        if ( is_date() ) {
            // Only display posts from category ID 1
            $query->set( 'cat', '1' );
        }
    }
}
add_action( 'pre_get_posts', 'wpse75668_filter_pre_get_posts' );

For more information, see Nacin’s WordCamp presentation, You Don’t Know Query.