I have this code:
$filestowatch=get-content C:\GT\files-to-watch.txt $adminFiles=dir C:\GT\admin\src\admin\wwwroot\content\less\ |? {$filestowatch -contains $_.Name} $userfiles=dir C:\GT\user-staging\src\user_staging\wwwroot\content\less\|? {$filestowatch -contains $_.Name} and in files-to-watch.txt
_dark.less _light.less This creates a list of adminFiles and a list of userFiles that my code uses.
However I have a problem in that some files are in directories under wwwroot. So I need to watch the files here:
\content\less\_dark.less \content\less\_light.less \lib\abc.txt \index.txt Can someone help and suggest how I could change this so code so that it works with directories and then filenames in the files-to-watch.txt.
Update - Here's the full code that I have come up with I tried vesper's suggestion but it seems not to work with my code.
$filestowatch=get-content C:\GT\files-to-watch.txt $adminFiles=dir C:\GT\admin\src\admin\wwwroot -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True} $userFiles=dir C:\GT\user-staging\src\user-staging\wwwroot -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True} foreach($userfile in $userFiles) { Write-Host "Checking" $userfile.FullName $exactadminfile= $adminfiles | ? {$_.Name -eq $userfile.Name} |Select -First 1 $filetext1=[System.IO.File]::ReadAllText($exactadminfile.FullName) $filetext2=[System.IO.File]::ReadAllText($userfile.FullName) $equal = $filetext1 -ceq $filetext2 # case sensitive comparison if ($equal) { break; } if($exactadminfile.LastWriteTime -gt $userfile.LastWriteTime) { Write-Host "Copying $exactadminfile.FullName to $userfile.FullName " Copy-Item -Path $exactadminfile.FullName -Destination $userfile.FullName -Force } else { Write-Host "Copying $userfile.FullName to $exactadminfile.FullName " Copy-Item -Path $userfile.FullName -Destination $exactadminfile.FullName -Force } } and my files to watch
content\less\_dark.less content\less\_light.less I think this is close but it gives me this error:
PS C:\Windows\system32> C:\GT\watcher.ps1 dir : Cannot find path 'C:\GT\user-staging\src\user-staging\' because it does not exist. At C:\GT\watcher.ps1:8 char:12 + $userFiles=dir C:\GT\user-staging\src\user-staging\wwwroot -recurse | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\GT\user-staging\src\user-staging\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand