C:\Program Files\7-Zip>7z a -t7z -m0=lzma -mx=5 -mfb=128 -md=32m -ms=on "D:\test\myarchive.7z" "D:\test\test files"
Если по задумке в конце запускае удаление оставшихся папок с правами администратора, то почему бы не удалять все сразу с правами администратора?
И даже, если вдруг есть причина так не делать (хотел бы я узнать, какая)
можно пробовать удалить все без прав администратора, а потом просто смотреть, какие папки из списка остались на месте.
function HandleFoundPatternsIndexes {
param (
[Parameter(Mandatory)]
[string[]]$patterns,
[Parameter(Mandatory)]
[int[]]$foundPatternsIndexes
)
[string]$notFoundPatterns = ''
# fix is ($foundPatternsIndexes.Count -eq 0 -OR ($foundPatternsIndexes.Count -eq 1 -AND $foundPatternsIndexes[0] -eq -1))
if ($foundPatternsIndexes.Count -eq 0) {
Write-Host "No patterns was found"
}
elseif ($foundPatternsIndexes.Count -eq $patterns.Count) {
Write-Host "All hex patterns found and replaced successfully in $filePathArg"
}
else {
[int[]]$notFoundPatternsIndexes = (0..$patterns.Count).Where({$_ -notin $foundPatternsIndexes})
for ($i = 0; $i -lt $notFoundPatternsIndexes.Count; $i++) {
$notFoundPatterns += ' ' + $patterns[$notFoundPatternsIndexes[$i]]
}
Write-Host "Hex patterns" $notFoundPatterns.Trim() "- not found, but other given patterns found and replaced successfully in $filePathArg"
}
}
$arg1 = @('"', $patcherFile, '"')
$arg2 = @('"', $targetFile , '"')
Start-Process powershell -Verb RunAs -ArgumentList "-noexit -File", ($arg1 -join ""), "-filePath", ($arg2 -join ""), "-patterns $patterns"
А сам не понимаешь? Что с тобой не так? Ты смотришь на код и не можешь проследить ход его работы? Объясняю:
1 call :testname передает управление на метку :testname
2 исполняется код до goto :eof
3 goto :eof приводит к выходу из кода, вместо выхода из процедуры
4 последние три инструкции кода не исполняются из-за пункта 3
5 код закончил исполнение - окно с командной строкой закрывается
6 Drovosek01 хлопает глазами и не понимает.
@echo off
set "path_bin_1=d:\TEMP\test.exe"
call :testname
pause
exit
REM тело функции располагаем в конце после оператора exit чтобы предотвратить выполнение в потоке.
:testname
echo "%path_bin_1%"
for /F "delims=" %%a in ("%path_bin_1%") do (
set file=%%~fa
set filepath=%%~dpa
set filename=%%~nxa
)
exit /B
echo "%path_bin_1%"
echo "%filename%"
pause