Importante: Una vez transcurrida la fecha límite para este evento, podrá encontrar las soluciones de VBScript, Windows PowerShell y Perl en el Script Center. |
En "Detectar errores", se pedirá a los participantes que depuren un script que contiene varios errores.
| Acerca de este evento | |
| Escenario del evento | |
| Cómo participar |
División | nivel principiante |
Fecha límite | Jueves, 28 de febrero de 2008 (08:00 a. m., hora del Pacífico) |
Puntos concedidos | 10 |
Cualquiera que haya escrito scripts o que haya tenido que modificar scripts existentes, sabe que una gran parte del tiempo se gasta en realizar la depuración. Para este evento, va a tener la oportunidad de probar sus habilidades para la depuración. Se le proporcionará un script y tendrá que buscar los errores que contenga con el fin de hacer que funcione. La clave de este ejercicio es no volver a escribir el script, sino trabajar con el script que se le proporciona. Recibirá instrucciones de lo que se espera que haga y tendrá que realizar las modificaciones necesarias para hacer que el script funcione. Puede mover líneas de código y modificarlas, pero no puede eliminarlas ni agregar líneas totalmente nuevas.
VBScript y Windows PowerShell
Se espera que estos scripts realicen las siguientes acciones:
| • | Buscar la carpeta C:\Scripts y todas sus subcarpetas. |
| • | Dentro de cada carpeta, buscar todos los archivos de texto (archivos con la extensión .txt) y comprobar la fecha de creación de cada uno. |
| • | Copiar cada archivo .txt con fecha de creación anterior a 10 días en la carpeta C:\Old. |
| • | Devolver el nombre de archivo (no la ruta de acceso completa, sino el nombre de archivo únicamente) de cada archivo copiado. (En VBScript, estos nombres deben mostrarse en la ventana de la consola cuando se ejecuten en CScript. De forma opcional, puede mostrar un único cuadro de mensaje con todos los nombres de archivo enumerados). |
| • | Devolver el número de archivos copiados. |
Pista: Colocamos 10 errores en las versiones correctas de cada uno de estos scripts para crear las versiones con errores.
Aquí tiene los scripts (que también están disponibles en el Paquete de Participantes de los Juegos de Scripting de 2008)):
VBScript:
Set objFSO = CreateObject("FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\scripts")
dtmOld = DateAdd("m", -10, Now)
AllFolders objFolder
CopyTextFiles objFolder
Sub AllFolders Folder
For Each objFolder in Folder.SubFolders
CopyTextFiles subfolder
AllFolders Subfolder
Next
End Sub
Sub CopyTextFiles(subFolder)
colFiles = SubFolder.Files
For Each objFile in colFiles
arrSplitName = Split(objFile.Name, ".")
strExtension = arrSplitName(UBound(arrSplitName) - 1)
If strExtension = "txt" and objFile.DateCreated > dtmOld Then
objFSO.CopyFile objFile.Path, "C:\old\"
Wscript.Echo objFile.Name
i = i + 1
Edn If
Next
End
Wscript.Echo
Wscript.Echo "Total Files: " & i
PowerShell:
for ($i in Get-ChildItem C:\Scripts)
(
if {($i.CreationTime -gt ($(Get-Date).AddMonths(-10))) and ($i.Extension = "txt")}
{
# Copy-Item $i.FullName C:\old
$i.Name
$x = $x + 1
}
)
""
"Total Files: " + $y
Perl
La edición de Perl para este evento es un poco diferente. El tratamiento de fechas en Perl puede ser bastante complicado, especialmente si no tiene instalados los módulos necesarios. No quisimos dar por supuesto que todos tienen estos módulos instalados ni complicar demasiado este evento. Por tanto, el script que vamos a mostrarle sólo debe realizar las siguientes acciones:
| • | Buscar la carpeta C:\Scripts y todas sus subcarpetas. |
| • | Dentro de cada carpeta, buscar todos los archivos de texto (archivos con la extensión .txt). |
| • | Copiar cada archivo .txt en la carpeta C:\Old. |
| • | Devolver el nombre de archivo (no la ruta de acceso completa, sino el nombre de archivo únicamente) de cada archivo copiado. |
| • | Devolver el número de archivos copiados. |
Pista: Hemos colocado 5 errores en el script correcto para producir este script.
Aquí tiene el script con errores (también disponible en el Paquete de Participantes de los Juegos de Scripting de 2008)):
use File::Copy;
File::Find;
File::Find::find({wanted => \&wanted}, 'C:\Scripts');
print "\nTotal Files: " . $count;
exit;
sub wanted (
my $count = 0;
/\.txt$/ or return;
my $filename = $_;
print "$filename \n";
my $newfile = "C:\\old\\" . "$_";
copy($File::Find::name, $newfile) or die "Copy failed: $!";
$count = $cout + 1
)
Una vez que haya completado su script, haga clic en el vínculo correspondiente para enviar su participación:
| • | |
| • | |
| • |
Si el vínculo no abre automáticamente un mensaje con una dirección predeterminada, envíe un correo electrónico a scripter@microsoft.com y en el asunto del mensaje, escriba Beginner VBScript: Event 7; Beginner Windows PowerShell: Event 7; o Beginner Perl: Event 7.
Lo único que debe hacer es pegar su código en el cuerpo del mensaje y, a continuación, enviar el correo. También puede incluir los datos siguientes:
| • | Un nombre o sobrenombre que podamos usar para identificarle al anunciar los ganadores de los Juegos de Scripting. |
| • | El nombre del país al que le gustaría representar. Puede ser su país de nacimiento o el país en el que viva actualmente, pero no tiene por qué ser así; puede representar al país que desee. |
| • | El nombre del grupo de usuarios del que sea miembro. Esta información debe incluirse en caso de que su grupo de usuarios tome parte en la Prueba de Grupos de Usuarios. |
Sólo necesita escribir estos datos en la parte superior del correo electrónico. Si lo hace así, su correo electrónico (suponiendo que esté enviando su participación para la división de VBScript) probablemente tendrá este aspecto:
Ken Myer
USA
Northern Iowa User Group
For i = 1 to 100
Wscript.Echo i
Next