Здравствуйте!
Суть проблемы такая — скопировал на флешку рабочий каталог, долго там работал на другом компе, но и на исходном понемногу тоже. Сейчас хочу разобраться, что модифицировано. И да, не надо про VCS мне втирать, и про git в частности.
Система — Windows 7
Решил сделать в cmd консоли:
dir $Path1 /ON /L /S >$Path1_cur.txt
dir $Path2 /ON /L /S >$Path2_mob.txt
windiff $Path1_cur.txt $Path2_mob.txt
Оба файла вышли под 25 метров, windiff за час так и не закончил анализ, мне надоело.
Решил разбить отдельно по подкаталогам и отфильтровать, исключив служебные каталоги SVN (.svn). При помощи cmd не придумал, как сделать, решил PowerShell поковырять. В принципе, если не получится, вернусь к cmd варианту, но интересно с powershell подразобраться. Проблема похоже в том, что ls/dir при запуске из powershell не ждут завершения
Мой ps скрипт выводит одно дерево каталога в один файл, и другое — в другой, затем вызывает windiff для полученных файлов:
| check-copy-util.ps1 |
| echo "--- Util"
"Arguments: $($args.count)"
$args
echo "First ls: F:\work\$($args[1])"
F:\work\check-copy-util2.ps1 F:\work\$($args[1]) F:\work\$($args[1])_cur.txt
echo "Second ls: $($args[0]):\work\$($args[1])"
F:\work\check-copy-util2.ps1 "$($args[0]):\work\$($args[1])" F:\work\$($args[1])_mob.txt
echo "Starting diff"
Start-Process "windiff F:\work\$($args[1])_cur.txt F:\work\$($args[1])_mob.txt"
# Start-Process "windiff"
|
| |
| check-copy-util2.ps1 |
| echo "--- Util2"
"Arguments: $($args.count)"
$args
echo "Do ls: $($args[0]) to $($args[1])"
ls -Path $($args[0]) -Exclude .svn -Recurse > $($args[1])
|
| |
| check-copy.ps1 |
| F:\work\check-copy-util.ps1 $($args[0]) builts
|
| |
| check-copy.bat |
| Powershell.exe -executionpolicy remotesigned -File F:\work\check-copy.ps1 H
|
| |
В таком виде выводит:
F:\work>Powershell.exe -executionpolicy remotesigned -File F:\work\check-copy.ps1 H
--- Util
Arguments: 2
H
builts
First ls: F:\work\builts
--- Util2
Arguments: 2
F:\work\builts
F:\work\builts_cur.txt
Do ls: F:\work\builts to F:\work\builts_cur.txt
Second ls: H:\work\builts
--- Util2
Arguments: 2
H:\work\builts
F:\work\builts_mob.txt
Do ls: H:\work\builts to F:\work\builts_mob.txt
Starting diff
Start-Process : Выполнение команды невозможно вследствие следующей ошибки: Не удается найти указанный файл.
F:\work\check-copy-util.ps1:9 знак:14
+ Start-Process <<<< "windiff F:\work\$($args[1])_cur.txt F:\work\$($args[1])_mob.txt"
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand
Если просто windiff вызывать без аргументов, то он норм запускается, а с аргументами — такое ощущение, что ls запускается в отдельном процессе, и не успевает отработать до запуска windiff с аргументами (это очень возможно).
А может и у меня баг от незнания — в скрипте check-copy-util.ps1 (я там в check-copy-util.ps1 выделил болдом и подчеркнул еще для заметности) — там пока кавычек не было, в check-copy-util2.ps1 передавалось три аргумента, а на два: двоеточие после $($args[0]) разбивало параметр на два — в итоге получалось, что передавалось — 1ый аргумент — то что до двоеточия: "H", второй — "\work\builts", третий — "F:\work\builts_mob.txt"
Помогите плс разобраться с powershell
Или, как вариант, может я не вижу какое-то другое простое решение, без powershell