大家好,我的问题是我的脚本在每一轮都只解析列表的第一行,有问题的程序没有批处理支持,所以它需要为每一行启动。如果有人能解释我做错了什么,那将是非常好的
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`cd /d J:temp2 ^& dir /p /b /s`) DO (
SET var=%%F
)
ECHO %var%
IF not exist "J:temp1%var:~3%" (mkdir "J:temp1%var:~3%")
RMDIR /s /q "J:temp1%var:~3%"
FOR /F "tokens=* USEBACKQ" %%A in ( %var% ) DO (
SET count+=1
J:tempwindowscomp.exe -o"J:temp1%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:temp2 ^& dir /p /b /s`) DO (
SET var=%%F
)
ECHO %var%
IF not exist "J:temp1%var:~3%" (mkdir "J:temp1%var:~3%")
rmdir /s /q "J:temp1%var:~3%"
for /F "tokens=* USEBACKQ" %%A in ( %var% ) do (
SET /a count+=1
echo !count!
J:tempwindowsprecomp.exe -o"J:temp1%var:~3%" -cn -d10 -intense -brute -s125 -t-j "%var%" )
试过Powershell,小得多,但运气不好。powershell认为路径会很长,但没有
$file = (Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname
$fout = (Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname.Substring(10)
Robocopy "J:temp2" "J:temp1" /S /E /ZB /DCOPY:T /SEC /COPYALL /XC /XO /XF *.*
Get-Content (Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname | ForEach-Object {
J:tempwindowsprecomp.exe -o"J:temp1$fout" -cn -d10 -intense -brute -s125 -t-j "$file"
}
还有Powerrshell:如果我使用Get-Content,我会收到错误对路径的访问被拒绝,或者使用Get-ChildItem突然显示错误的路径,如果手动匹配,它会给我错误"ReadLines"one_answers"1"参数,所以它不再逐行解析
$file = @(Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname
$fout = (Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname.Substring(10)
Robocopy "J:temp2" "J:temp1" /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:tempwindowsprecomp.exe -o"J:temp1$_arrayFromFout" -cn -d10 -intense -brute -s125 -t-j "$_arrayFromFile"
}
不要理解你在foreach循环的末尾做了什么。您从J:\temp\2获取所有数据,但不对其执行任何操作。要使用此数据,必须在foreach中使用$_变量。
Get-Content (Get-ChildItem "J:temp2" -Recurse -Force -ErrorAction SilentlyContinue ).fullname | ForEach-Object {
J:tempwindowsprecomp.exe -o"J:temp1$fout" -cn -d10 -intense -brute -s125 -t-j "$file"
}
现在可以工作了:
Robocopy "J:temp2" "J:temp1temp2" /E /ZB /DCOPY:A /SEC /COPYALL /XC /XO /XF *.*
(Get-ChildItem "J:temp2" -Recurse -Attributes !D -Force -ErrorAction SilentlyContinue ).fullname | Out-File -FilePath .Process.txt
foreach($file in [System.IO.File]::ReadLines(".Process.txt"))
{
$path = "J:temp1" + $file.Substring(2)
J:tempwindowsprecomp.exe -o"$path" -cn -d10 -intense -brute -s125 -t-j $file
}
如果不使用外部文件,这似乎是不可能的