No te entendi muy bien amigo pero creo que lo que quieres hacer es esto
Basicamente:
Para poder dividir necesito el total de archivos, luego gracias a el total puedo saber cuando saltar de columna, no es necesario ponerlo dos veces si lo utilizas asi "if ( $count % columns == 0 ) echo "</tr><tr>";", y a primera vista de tu codigo hay varios errores entre ellos "$i < $directorio;" si no me equivoco un recurso $directorio no puede dar un numero , lo mas cercano seria count($directorio) pero tampoco funciona con eso...
Si no te gusta la idea leer la carpeta dos veces por tiro..entonces lo mas simple es agregar todos estos archivos en un array, y contar el array..mostrar el array...
Código PHP:
<?php
//Establezco el numero de columnas
$columns = 3;
echo "<table width='100%' align='center' border='1' cellpadding='3' cellspacing='3'>";
$directorio = opendir(".");
//while ($archivo = readdir($directorio)){ //esta malo segun http://php.net/manual/es/function.readdir.php
$total_files = 0;
while (false !== ($archivo = readdir($directorio))){
$total_files++;
}
$count = 0;
closedir($directorio);
$directorio = opendir(".");
echo "<tr>";
while (false !== ($archivo = readdir($directorio))){
$count++;
$nombreArch = ucwords($archivo);
$nombreArch = str_replace("..", "Atras", $nombreArch);
if ( $count % $columns == 0 ) echo "</tr><tr>";
echo "<td width='15%' valign='top'>";
echo "<a href='$archivo'>";
echo "<img src='./appserv/dir.png' alt='Ver $nombreArch'";
echo " border=0>";
echo "<b> $nombreArch </b></a>
</td>";
}
closedir($directorio);
echo "</tr>";
echo "</table>";
?>