diff для дерева каталогов и вопрос по PowerShell
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.03.16 21:53
Оценка:
Здравствуйте!

Суть проблемы такая — скопировал на флешку рабочий каталог, долго там работал на другом компе, но и на исходном понемногу тоже. Сейчас хочу разобраться, что модифицировано. И да, не надо про 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
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.