L oop через каждую линию - пробовал PS и CMD - PullRequest
0 голосов
/ 28 февраля 2020

Добрый день, моя проблема в том, что мой скрипт анализирует только первую строку моего списка на каждом ходу, у рассматриваемой программы нет пакетной поддержки, поэтому ее нужно запускать для каждой строки. Было бы очень хорошо, если бы кто-то мог даже объяснить, что я сделал неправильно

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1

FOR /F "tokens=* USEBACKQ" %%F IN (`cd /d J:\temp\2 ^& dir /p /b /s`) DO (
SET var=%%F
)
ECHO %var%

IF not exist "J:\temp\1\%var:~3%" (mkdir "J:\temp\1\%var:~3%")
RMDIR /s /q "J:\temp\1\%var:~3%\"

FOR /F "tokens=* USEBACKQ" %%A in ( %var% ) DO (
SET count+=1
J:\temp\windows\comp.exe -o"J:\temp\1\%var:~3%" -cn -d10 -intense -brute -s125 -t-j "%var%" )

Это также не работает

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION
set /a count = 1

FOR /F "tokens=* USEBACKQ" %%F IN (`cd /d J:\temp\2 ^& dir /p /b /s`) DO (
SET var=%%F
)
ECHO %var%

IF not exist "J:\temp\1\%var:~3%" (mkdir "J:\temp\1\%var:~3%")
rmdir /s /q "J:\temp\1\%var:~3%\"

for /F "tokens=* USEBACKQ" %%A in ( %var% ) do (
SET /a count+=1
echo !count!
J:\temp\windows\precomp.exe -o"J:\temp\1\%var:~3%" -cn -d10 -intense -brute -s125 -t-j "%var%" )

Пробный Powershell, намного меньше, но не повезло. PowerShell думает, что пути будут длинными, но нет

$file = (Get-ChildItem "J:\temp\2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname
$fout = (Get-ChildItem "J:\temp\2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname.Substring(10)

Robocopy "J:\temp\2" "J:\temp\1\" /S /E /ZB /DCOPY:T /SEC /COPYALL /XC /XO /XF *.*

Get-Content (Get-ChildItem "J:\temp\2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname | ForEach-Object {
J:\temp\windows\precomp.exe -o"J:\temp\1\$fout" -cn -d10 -intense -brute -s125 -t-j "$file"
}

Также Powerrshell: если я использую Get-Content, я получаю ошибку Доступ к пути запрещен, или с помощью Get-ChildItem неожиданно появляется неправильный путь, и, если сопоставить вручную, выдает ошибку "ReadLines" с аргументом (ами) "1", поэтому он больше не разбирает его построчно

$file = @(Get-ChildItem "J:\temp\2\" -Recurse -Force -ErrorAction SilentlyContinue ).fullname
$fout = (Get-ChildItem "J:\temp\2\" -Recurse -Force -ErrorAction SilentlyContinue ).fullname.Substring(10)

Robocopy "J:\temp\2" "J:\temp\1\" /S /E /ZB /DCOPY:T /SEC /COPYALL /XC /XO /XF *.*

$arrayFromFile = @(Get-Content $file)
$arrayFromFout = @(Get-Content $fout)

foreach($line in [System.IO.File]::ReadLines("$arrayFromFile"))
{
       J:\temp\windows\precomp.exe -o"J:\temp\1\$_arrayFromFout" -cn -d10 -intense -brute -s125 -t-j "$_arrayFromFile"
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Теперь это работает:

Robocopy "J:\temp\2" "J:\temp\1\temp\2\" /E /ZB /DCOPY:A /SEC /COPYALL /XC /XO /XF *.*

(Get-ChildItem "J:\temp\2\" -Recurse -Attributes !D -Force -ErrorAction SilentlyContinue ).fullname | Out-File -FilePath .\Process.txt

foreach($file in [System.IO.File]::ReadLines(".\Process.txt"))
{       
    $path = "J:\temp\1" + $file.Substring(2)
    J:\temp\windows\precomp.exe -o"$path" -cn -d10 -intense -brute -s125 -t-j $file
}

Кажется невозможным без использования внешнего файла

0 голосов
/ 28 февраля 2020

Не понимаю, что вы делаете в своем foreach l oop в конце. Вы берете все данные из J: \ temp \ 2, но ничего с этим не делаете. Для использования этих данных вы должны использовать переменную $ _ в foreach.

 Get-Content (Get-ChildItem "J:\temp\2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname | ForEach-Object {
    J:\temp\windows\precomp.exe -o"J:\temp\1\$fout" -cn -d10 -intense -brute -s125 -t-j "$file"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...