Script: Скриптовая эволюция

Дано — написать скрипт, который кидает определённые файлы из локальной папки в папку на подключенном сетевом диске. Например, веб-проект, в котором мы изменили 2–3 dll. OS Win­dows.

На каком языке писать скрипт?

ActivePerl под Win­dows — иногда не принимает переданных параметров
Cyg­win — нету
Pow­er­Shell — просто так даже Hel­lo World не запустишь. Система будет ругаться, что он… не подписан (маразм? маразм!)

Похоже, технологии ушли слишком далеко. Нам остаётся только старый формат CMD файлов.

copydll.cmd:

@echo off
set FROM=d:proj1bin
set TO=W:stableproj1bin
FOR %%A IN (%*) DO IF EXIST "%FROM%%%A.dll" COPY /Y "%FROM%%%A.dll" "%TO%%%A.dll"

Добавляем папку в Path и вызываем

copydll Proj.Module1 Proj.Module2

А этот cmd можно кинуть на панель в Total Com­man­der и просто перетаскивать туда нужный файл:

@echo off
set TO=W:stableproj1bin
FOR %%A IN (%*) DO IF EXIST %%A COPY /Y %%A "%TO%%%~nxA"

Конечно, можно просто перетащить на панель Total Commander’а саму папку, но тогда придётся дважды щёлкать мышкой (ОК в диалоге копирования и потом Replace All)

Да, ещё. Если написать в CMD-шке PAUSE, она в этом месте попросит Press any key to con­tin­ue.…

Cygwin: Лучше, чем у Лекса Кравецкого

Во время оно lex-kravet­s­ki был не только коммунистом, но ещё и программистом. Например, написал большой пост о том, как конвертировать wav в mp3 консольным конвертером и 2 BAT-файлами.
При всем нашем уважении к пакетным файлам, то же самое на cyg­win выглядит не в пример лучше, лаконичней и помещается в 1 скрипт:

#!/bin/sh
LameDir="C:/lame"
if ([ $1 ]) then
 Artist="$1"
else
 echo -n "Artist="
 read Artist
fi
if ([ $2 ]) then
 Genre="$2"
else
 echo -n "Genre="
 read Genre
fi
CurrentDir=`dirs`
ParamAlbum=`echo $CurrentDir | sed 's!^(/?.*)*/(([0-9]{4})[ -]+)?(.*)$!--ty "3" --tl "4"!g'` #RegExp: ^(/.*)*/(([0-9]{4})[ -]+)?(.*)$
for filename in *.wav
do
  FileShortName=`echo $filename | sed 's!^(.*).wav$!1!g'` #RegExp: ^(.*).wav$
  ParamTrack=`echo $FileShortName | sed 's!^([0-9]{2})[ -.]+(.*)!--tn "1" --tt "2"!g'` #RegExp: ^([0-9]{2})[ -.]+(.*)
  echo "$LameDir/lame.exe -V2 "$CurrentDir/$FileShortName.wav" "$CurrentDir/$FileShortName.mp3" --pad-id3v2 --ta="$Artist" $ParamAlbum $ParamTrack --tg="$Genre""
done

Как использовать?

  1. Сохраняем скрипт в нашу директорию со скриптами под именем tomp3 (или ещё каким-нибудь). Во второй строке указываем директорию, куда мы распаковали Lame.
  2. Копируем файлы с CD в wav в таком виде:2009 — Album / 01 — Song.wavИли в другом:Album/01 — Song with a long-ling name.wav(год может быть и пустым)
  3.  Открываем cyg­win И переходим в папку с Wav-ками
  4. Набираем SH ~/tomp3 “Artist” “Genre”. Если без них — скрипт сам спросит.
  5. После завершения кодирования: rm *.wav
  6. И quit

К сожалению, скрипта с подсветкой синтаксиса для bash-скриптов у меня нет. Поэтому я подсветил как brush:perl. Получилось ярко и доступно.