2014-12-11 4 views
0

У меня есть следующий скрипт, и он не будет работать. Я пытаюсь создать 4 файла, сравнить их все и сохранить наименьшее количество и удалить оставшиеся более 3 файлов. Вот что у меня есть:Этот командный скрипт не работает, почему?

@echo off 
dir /s /b /A-D folder\ > list.txt 
for /r folder %%a in (*.*) do (
    dime.exe -A SCANTYPE=Q -A SCANL=7 "%%a" "%%a.q" 
    dime.exe -A SCANTYPE=Q -A SCANL=7 -A SCANM=21 "%%a" "%%a.q21" 
    make.exe -A SCANTYPE=X -A SCANL=7 "%%a" "%%a.x" 
    make.exe -A SCANTYPE=X -A SCANL=7 -A SCANM=21 "%%a" "%%a.x21" 
     for %%b in ("%%a.q") do for %%c in ("%%a.q21") do for %%d in ("%%a.x") do for %%e in ("%%a.x21") do (
     if %%~zb LEQ %%~zc (del "%%a.q21") else (del "%%a.q") 
     if %%~zb LEQ %%~zd (del "%%a.x") else (del "%%a.q") 
     if %%~zb LEQ %%~ze (del "%%a.x21") else (del "%%a.q") 
    ) 
for /F "tokens=*" %%b in (list.txt) do del /Q "%%b" 
del list.txt 

Любые идеи?

+0

Можете ли вы поместить выходные файлы в отдельный каталог (вне '' folder \ '' tree)? –

ответ

-1

Возможно, я ошибаюсь, но думаю, что вы typo'd >>. Честно говоря, не понимаю остальных, хотя ха-ха. dir /s /b /A-D folder\ >> list.txt

+0

Я дважды проверял и нет, я не ставил >>. Остальное использует 2 программы для создания 4 файлов. Тогда моя попытка сравнить все четыре файла и сохранить наименьшее количество и удалить 3 больших файла. – Manny90

+0

David: в пакетном файле dir/b> file.txt создает file.txt. На моей машине с Windows 7 это работает. Это не проблема. Все 4 файла для каждого файла в папке создаются, это не проблема. Раздел «если» - это проблемный раздел. – Manny90

+0

'>' создает новый файл или перезаписывает существующий файл, '>>' создает новый файл или добавляет к существующему файлу. Во всяком случае, проблема, конечно же, не в перенаправлении. Хорошая попытка, но ваш ответ не решает проблему вообще. –

1
@echo off 
    dir /s /b /A-D folder\ > list.txt 
    for /r folder %%a in (*.*) do (
     dime.exe -A SCANTYPE=Q -A SCANL=7 "%%a" "%%a.q" 
     dime.exe -A SCANTYPE=Q -A SCANL=7 -A SCANM=21 "%%a" "%%a.q21" 
     make.exe -A SCANTYPE=X -A SCANL=7 "%%a" "%%a.x" 
     make.exe -A SCANTYPE=X -A SCANL=7 -A SCANM=21 "%%a" "%%a.x21" 
     for /f "skip=1 delims=" %%b in (' 
      dir /a-d /b /os "%%a.q" "%%a.q21" "%%a.x" "%%a.x21" 
     ') do del /q "%%b" >nul 2>nul 
    ) 

    for /F "delims=" %%b in (list.txt) do del /Q "%%b" 
    del list.txt 

В коде отсутствовала закрывающая скобка. Логика проверки размера файла была переведена в команду dir, чтобы получить отсортированный список по размеру, пропустить первый и удалить остальные.

Смежные вопросы