2015-09-04 2 views
1

Я ищу некоторую помощь в создании файла BAT, который поможет удалить видео и изображения по определенной длине имени файла.Удалять файлы с именами файлов длиннее, чем x

Немного предыстории:

У нас есть пользовательские сделал заявление, и мы не имеем исходный код. он обновляет свои видео из фида. в последнее время мы получаем ошибки «перехват буфера». мы считаем, что имена файлов более 90 символов становятся проблемой.

Я хочу удалить эти файлы в формате WMV и JPG, прежде чем они станут проблемой. Обычно мы используем файлы bat для выполнения этих небольших задач.

ответ

0

Не придерживайтесь какой-то ОС-специфики, используйте язык сценариев, который будет работать на любой платформе, например. Node.js

var fs = require("fs"); 

var folderName = __dirname; // for current folder 
var maxlength = 90; 

function getFiles(dir, files_) { 
    files_ = files_ || []; 
    var files = fs.readdirSync(dir); 
    for (var i in files) { 
     var name = dir + '/' + files[i]; 
     if (fs.statSync(name).isDirectory()) { 
      getFiles(name, files_); 
     } else { 
      files_.push(name); 
     } 
    } 
    return files_; 
} 

var files = getFiles(folderName); 
console.log(files); 
for (var i = 0; i < files.length; i++) { 
    filename = files[i]; 
    if (filename.length > maxlength) { 
     console.log("Deleting " + filename); 
     fs.unlinkSync(filename); 
    } 
} 
+0

так я бы просто вставить что-то вроде этого в текстовый файл и сохранить его в виде файла JavaScript? с внесенными изменениями, конечно –

+0

да, затем запустите 'node delete90.js' –

+0

спасибо за помощь. работал как шарм! –

0

без внешних инструментов (не проверено):

@echo off 

rem:::: set the correct directory 
set "rootdir=c:\somewhere" 
pushd "%rootdir%" 

setlocal enableDelayedExpansion 

for %%# in (*.WMV *.JPG) do (

    call ::strlen0 "%%~nx#" len 
    if !len! GEQ 90 (
     rem:::: remove the echo if the correct files are listed 
     echo del /q /f "%%~nx#" 
    ) 

) 

endlocal 



exit /b 0 
:strlen0 StrVar [RtnVar] 
    setlocal EnableDelayedExpansion 
    set "s=#!%~1!" 
    set "len=0" 
    for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
     set /a "len+=%%N" 
     set "s=!s:~%%N!" 
    ) 
) 
    endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len% 
exit /b 

Обратите внимание на замечания - это те места, которые вы должны изменить свой сценарий.

1

Я думаю, что это самый простой способ сделать это:

@echo off 
setlocal EnableDelayedExpansion 

for %%a in (*.WMV *.JPG) do (
    set "filename=%%a" 
    if "!filename:~90!" neq "" (
     ECHO del "%%a" 
    ) 
)