Bat подсчет количества файлов в папке

Я предполагаю, что вы не хотите считать скрытые или системные файлы.

Есть много способов сделать это. Все методы, которые я покажу, включают ту или иную форму команды FOR. Существует множество вариантов команды FOR, которые выглядят почти одинаково, но ведут себя совершенно по-разному. Это может сбить с толку новичка.

Вы можете получить помощь, набрав HELP FOR or FOR /? из командной строки. Но эта помощь немного загадочна, если вы не привыкли ее читать.

1) Команда DIR выводит список файлов в каталоге. Вы можете передать результаты DIR в FIND, чтобы получить соответствующую строку, а затем использовать FOR /F для анализа нужного значения из строки. Проблема с этим методом заключается в том, что искомая строка должна меняться в зависимости от языка, используемого операционной системой.

@echo off
for /f %%A in ('dir ^| find "File(s)"') do set cnt=%%A
echo File count = %cnt%

2) Вы можете использовать DIR /B /A-D-H-S чтобы вывести список нескрытых/несистемных файлов без другой информации, направьте результат в FIND для подсчета количества файлов и используйте FOR /F для чтения результата.

@echo off
for /f %%A in ('dir /a-d-s-h /b ^| find /v /c ""') do set cnt=%%A
echo File count = %cnt%

3) Вы можете использовать простой FOR для перечисления всех файлов и SET/A для увеличения счетчика для каждого найденного файла.

@echo off
set cnt=0
for %%A in (*) do set /a cnt+=1
echo File count = %cnt%

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

  • Jack_Dream

Тема: CMD/BAT: Как сделать батником контроль количества файлов в папке

Есть програмка которая переносит файлы с папки 1 в папку 2, как сделать когда в папке 1 остается меньше 10 файлов, то все содержимое батник переносил в папку 2, как мониторить количество файлов каждые 5сек например, помогите пожалуйста

Точнее так
Смотрим сколько файлов, если больше 10, то пауза 5 секунд и опять смотрим, больше 10 еще 5 сек пауза, если меньше 10, делаем перенос с папки 2 в папку 1 и опять начинаем мониторить папку 1

teadrinker

  • teadrinker

Re: CMD/BAT: Как сделать батником контроль количества файлов в папке

Jack_Dream, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на точки в конце предложений.

o5andrey (изменено: o5andrey, 2022-05-07 18:01:38)

  • o5andrey

Re: CMD/BAT: Как сделать батником контроль количества файлов в папке

Set sum=0
Set folder=d:\test
Set folder2=d:\test_
For /r "%folder%" %%i In (*.*) Do Set /a sum+=1
Echo %sum%
if %sum% LSS 10 move /y "%folder%\*" "%folder2%"
Pause

Для регулярного запуска добавьте задание в планировщике задач.
Если там нет секунд, рекомендую утилиту nnCron LITE.

teadrinker

  • teadrinker

Re: CMD/BAT: Как сделать батником контроль количества файлов в папке

o5andrey, на будущее, у нас не принято отвечать в топике, если участнику было сделано замечание, а он не отреагировал.

Сообщения 4

Как мне подсчитать все файлы данного типа (например. * .mp3) в назначенной папке (и, необязательно, подпапках) из командной строки в переменную среды?

(пожалуйста, не PowerShell, просто командные команды)

Подсчет файлов в папке и подпапках

Используйте следующую команду:

dir /b *.mp3 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%

Переменная среды %count% будет содержать количество файлов.

  • Удалите /s если вы не хотите считать файлы в подпапках.

Пример (используя * .txt)

Список каталогов для отображения 17 файлов:

F:\test>dir /b *.txt /s
F:\test\abc.txt
F:\test\blackwhite.txt
F:\test\cpu.txt
F:\test\interface.txt
F:\test\Lorem ipsum.txt
F:\test\right.txt
F:\test\rights.txt
F:\test\software.txt
F:\test\tabs.txt
F:\test\test.txt
F:\test\this is inside junction.txt
F:\test\unique.txt
F:\test\xyz.txt
F:\test\sub\abc.txt
F:\test\sub\xyz.txt
F:\test\sub with space\junction sub with space.txt
F:\test\sub with space\xyz.txt
F:\test>dir /b *.txt /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
17

дальнейшее чтение

  • Индекс AZ командной строки Windows CMD – Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • find – поиск текстовой строки в файле и отображение всех строк, где она найдена.

ответ дан DavidPostill

set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)

Используйте комбинацию dir и find для подсчета файлов. Сохраните файлы в переменную через цикл for . Перенаправить вывод ошибки в nul чтобы скрыть ошибку File Not Found .

@echo off
for /f %%i in ('dir *.xlsx /s /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR%

Смотрите описания параметров, используя /? для dir , find и for .

Как можно пройти через папку и ее подпапки (каталог и его подкаталоги) и перечислить, сколько файлов с определенным расширением содержится в них в общей сложности, для каждого расширения, которое встречается в этих папках?

Что-то похожее на это,

folders               48 total
.jpg                2842 total
.gif                 142 total
.CR2                2842 total

Сумма, указанная выше, должна совпадать с суммой в dir/s которой перечислены все файлы и подпапки в некоторой папке.

Следующий фрагмент кода может помочь:

@ECHO OFF >NUL
SETLOCAL EnableExtensions
rem EnableDelayedExpansion
rem next line: clear/delete all `_filesTotal` environment variables
for /F "delims==" %%G in ('set _filesTotal 2^>NUL') do set "%%G="
rem next line: initialize `_foldersTotal` environment variable
set "_foldersTotal=0"
pushd "folder where count"
for /F "delims=" %%G in ('dir /B /S /A') do (
  if exist "%%~G\" (
    rem folder %%G
    set /A "_foldersTotal+=1"
  ) else (
    rem   file %%G
    if "%%~xG"=="" (set /A "_filesTotal.+=1") else (set /A "_filesTotal%%~xG+=1")
  )
)
rem next two lines: display raw results
echo %CD%
set _foldersTotal
set _filesTotal
popd

Ресурсы (требуется чтение):

  • (справочник по командам) Индекс AZ командной строки Windows CMD
  • (дополнительные особенности) Синтаксис командной строки Windows CMD Shell
  • (%~G и т.д. Специальная страница) Аргументы командной строки (параметры)
  • (>> , 2>NUL и т.д. Специальная страница) Перенаправление

Обход папок и подсчет файлов

Как можно пройти через папку и ее подпапки (каталог и его подкаталоги) и перечислить, сколько файлов с определенным расширением содержится в них в общей сложности, для каждого расширения, которое встречается в этих папках?

Используйте следующие 3 пакетных файла.

  • В настоящее время не учитываются файлы без расширения (что оказалось вне краткости вопроса).
  • Некоторые файлы могут быть подсчитаны несколько раз, если 8.3 имена не отключены.
@echo off
setlocal enabledelayedexpansion
rem count directories
call CountDirs
rem get list of extensions
for /f "usebackq" %%i in (`dir /a:-d /b /s`) do (
  set _extension=%%~xi
  if [!_extension!] neq [] echo !_extension:~1! >> %temp%\extensions 
  )
rem get list of unique extensions
set _last=
for /f "usebackq" %%j in (`sort %temp%\extensions`) do (
  set _this=%%j
  if [!_last!] neq [!_this!] echo !_this! >> %temp%\unique
  set _last=%%j
  )
rem count the files
for /f %%k in (%temp%\unique) do (
  call CountFiles %%k
  )
rem cleanup
if exist %temp%\extensions del %temp%\extensions
if exist %temp%\unique del %temp%\unique
endlocal
@echo off
rem count directories
dir /a:d /b /s | find "" /c /v > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo folders %_count% total
@echo off
rem count files matching %1
dir /b *.%1 /s 2> nul | find "" /v /c > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo .%1 %_count% total
F:\test>Total.cmd
folders 15 total
.1 1 total
.bat 1 total
.cmd 10 total
.csv 6 total
.exe 4 total
.html 1 total
.java 1 total
.jpg 1 total
.js 1 total
.mak 1 total
.php 1 total
.ps1 1 total
.sh 1 total
.txt 19 total
.txt1 2 total
.zip 1 total
F:\test>

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD – Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • dir – Показать список файлов и подпапок.
  • enabledelayedexpansion – отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for /f – Циклическая команда против результатов другой команды.
  • if – Условно выполнить команду.
  • параметры – аргумент командной строки (или параметр) – это любое значение, переданное в пакетный скрипт.
  • set – отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.

ответ дан DavidPostill

$foldercount = 0
$hash = @{}
Get-ChildItem -Path "C:\Code Samples" -Recurse | ForEach-Object { 
    if ($_.Attributes -eq 'Directory') 
        { 
        ++$foldercount
        }
    else
        {
        if ($hash.ContainsKey($_.Extension)) 
            { $count = $hash.Get_Item($_.Extension); ++$count; $hash.Set_Item($_.Extension, $count) }
        else
            { $hash.Add($_.Extension, 1) } 
        }
}

Write-Host $foldercount folders
$hash.GetEnumerator() | Sort-Object Value -descending
90 folders

Name                           Value                                                                                                                                                                                                 
----                           -----                                                                                                                                                                                                 
.tlog                          186                                                                                                                                                                                                   
.h                             72                                                                                                                                                                                                    
.obj                           56                                                                                                                                                                                                    
.cpp                           54                                                                                                                                                                                                    
.pdb                           26                                                                                                                                                                                                    
.manifest                      24                                                                                                                                                                                                    
.res                           23                                                                                                                                                                                                    
.rc                            22                                                                                                                                                                                                    
.log                           15                                                                                                                                                                                                    
.lastbuildstate                12                                                                                                                                                                                                    
.ipch                          12                                                                                                                                                                                                    
.ico                           12                                                                                                                                                                                                    
.exe                           12                                                                                                                                                                                                    
.idb                           12                                                                                                                                                                                                    
.vcxproj                       11                                                                                                                                                                                                    
.ilk                           11                                                                                                                                                                                                    
.user                          11                                                                                                                                                                                                    
.sdf                           11                                                                                                                                                                                                    
.zip                           11                                                                                                                                                                                                    
.filters                       11                                                                                                                                                                                                    
.sln                           11                                                                                                                                                                                                    
.pch                           11                                                                                                                                                                                                    
.txt                           8                                                                                                                                                                                                     
.gif                           8                                                                                                                                                                                                     
.rc2                           8                                                                                                                                                                                                     
.aps                           8                                                                                                                                                                                                     
.bmp                           7                                                                                                                                                                                                     
.dsw                           6                                                                                                                                                                                                     
.dsp                           6                                                                                                                                                                                                     
.png                           5                                                                                                                                                                                                     
.css                           5                                                                                                                                                                                                     
.html                          4                                                                                                                                                                                                     
.old                           4                                                                                                                                                                                                     
.XML                           4                                                                                                                                                                                                     
.vcproj                        4                                                                                                                                                                                                     
.xslt                          4                                                                                                                                                                                                     
.exp                           3                                                                                                                                                                                                     
.dll                           3                                                                                                                                                                                                     
.lib                           3                                                                                                                                                                                                     
.clw                           2                                                                                                                                                                                                     
.def                           2                                                                                                                                                                                                     
.opt                           2                                                                                                                                                                                                     
.ncb                           2                                                                                                                                                                                                     
.plg                           2                                                                                                                                                                                                     
.recipe                        2                                                                                                                                                                                                     
.rtf                           1                                                                                                                                                                                                     
.jpg                           1                                                                                                                                                                                                     
.h original                    1                                                                                                                                                                                                     
.bat                           1                                                                                                                                                                                                     
.js                            1                                                                                                                                                                                                     
.cpp original                  1                                                                                                                                                                                                     
.DPbcd                         1                                                                                                                                                                                                     

Какую команду вы бы использовали cmd.exeдля определения количества файлов в текущем каталоге?

Здесь есть опция powershell?

Обновление : я надеялся избежать dir, поскольку я знаю, что в текущем каталоге более 10000 файлов. Хотел избежать вывода перечисления в окно cmd. Спасибо!


Если вы хотите сделать это cmd, то вот тривиальный способ сделать это:

      

Это предполагает командную строку. В командном файле вы бы сделали

 off
setlocal enableextensions
set count
  

что делает вещи немного лучше. Вы можете оставить >nulв пакете, так set /aкак не будет отображать результат, если запустить из пакетного файла – он делает это непосредственно из командной строки. Кроме того, %знак в forцикле должен быть удвоен.

:/>  Расшифровка значений SMART жёсткого диска

Я видел довольно много случаев, когда люди пробовали отличные трюки find /c. Будьте очень осторожны с этим, поскольку различные вещи могут сломать это.

  1. Используя find /c /vи попробуйте найти что-то, что никогда не входит в имя файла, например ::. Не будет. Работа. Достоверно. Когда в окне консоли установлены растровые шрифты, вы можете получить эти комбинации символов. Я могу включать символы в имени файла , например :, ?и т.д. в их полной ширине вариантов, например, которые затем преобразуются в их обычных ASCII – аналоги , которые будут нарушать это. Если вам нужен точный счет, не пытайтесь это сделать.

  2. Используйте find /cи попробуйте найти то, что всегда включено в имя файла. Очевидно, точка ( .) – плохой выбор. Другой ответ предполагает

Как правило, вы хотите использовать findна dir /bкоторый отсекает все без файла вещи и позволяет избегать ошибок fencepost таким образом.

Таким образом, элегантный вариант будет:

который сначала выведет все имена файлов, по одной строке. А затем посчитайте все строки того вывода, которые не пусты. Поскольку имя файла не может быть пустым (если я не пропустил что-то, но Unicode не запутает это согласно моим тестам).







Спросите, и вы получите:
http://technet.microsoft.com/en-us/library/ee692796.aspx

Подсчет количества предметов в папке

Ну, что вы знаете: похоже, что солнце наконец-то выходит, а значит, нам почти пора уходить. Однако, прежде чем мы это сделаем, давайте покажем вам последний маленький трюк с командлетом Get-ChildItem. Иногда вам не нужно много знать о файлах в папке; все, что вам действительно нужно знать, – это сколько файлов (если они есть) можно найти в определенной папке. Вот как вы можете быстро посчитать количество файлов в папке:

Что мы здесь делаем? Мы просто используем Get-ChildItem, чтобы вернуть коллекцию всех элементов, найденных в папке C: \ Scripts; поскольку это коллекция, все, что нам нужно сделать, – это вернуть значение свойства Count, которое сообщает нам количество элементов в коллекции. Обратите внимание на использование круглых скобок: мы заключаем команду Get-ChildItem в круглые скобки, чтобы гарантировать, что Windows PowerShell сначала захватывает коллекцию, а затем возвращает значение свойства Count для этой коллекции.

И конечно, вы можете включить фильтр при вызове Get-ChildItem. Нужно знать, сколько файлов .PS1 находится в папке C: \ Scripts? Окей-doke:







Предупреждение об использовании PowerShell для таких простых файловых операций, как этот – он невероятно медленный по сравнению с cmd.exe, особенно по сетевым подключениям или когда в каталоге находятся тысячи файлов. Смотрите этот пост на форуме для получения дополнительной информации.



dir дает вам общее количество файлов в нижней части.







Самый быстрый способ, который я нашел, – запустить следующее в консоли PS.

где $ path – это локальный путь или общий ресурс UNC.







Нашел это в сети:

  

Я проверил, и это похоже на работу.





dir возвращает количество файлов и каталогов внизу


Буду конечно работать

Не устанавливая что-либо на сервер, но имея PowerShell на своей рабочей станции, вы можете сделать:

"select *from cim_datafile where path = '\\'"

эта команда выдаст вам все файлы (включая системные и скрытые), и, как уже упоминалось ранее, если на машине есть powershell, вы можете просто

Обратите внимание, что если вы не включите . Вы получите количество всех файлов и всех каталогов. Вы не будете включать скрытые и системные файлы, которые нужно добавить -force, чтобы подсчитать их все


Если бы мне это понадобилось только один раз, я бы просто использовал dir, в противном случае я бы подумал о том, чтобы развернуть свое собственное, вероятно, как приложение на C #, потому что это то, с чем я был бы наиболее знаком (хотя VBScript или PowerShell также были бы жизнеспособны).

(Кстати – это не DOS, если вы используете cmd.exe)


Я считаю, что вы можете использовать attrib, чтобы получить количество файлов:

 

Это создаст файл с именем filecount.txt в текущем каталоге с количеством файлов и папок в текущем каталоге (включая вновь созданный файл). Вы можете изменить

для того, чтобы получить количество файлов определенного каталога. Удалите опцию «/ D», если вы не хотите считать папки. Параметр “/ s” обрабатывает файлы во всех каталогах по указанному пути. Поэтому удалите его, если вам нужны только файлы по указанному пути и вы не хотите включать файлы в подпапки.

Например, если вы хотите узнать, сколько файлов находится на вашем диске C: \, а не в какой-либо подпапке, используйте команду:

  





Я делаю нечто подобное, и это работает с любым количеством файлов мгновенно.

       many files in directory






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

Чтобы открыть командную строку в нужном месте (в папке с файлами, например), нужно вызвать контекстное меню (ПКМ) с зажатой клавишей :

вызов командной строки

О том, как работать с командной строкой вы можете прочесть в этой статье. Переходим непосредственно к командам.

Список всех команд консоли с описанием можно получить, набрав в консоли
Справку по любой команде можно получить при помощи ключа
Например: выведет справку по всем ключам команды

Удаление временных файлов перед выключением компьютера

Я думаю, что все как минимум слышали о sms-вирусах или сталкивались с ними лично. Bat-файл поможет вам правильно завершить работу компьютера, удалив временные файлы, в папку с которыми обычно и загружается вирус.

При следующей загрузке устройства (на ранней стадии) вирус делает записи в реестре, нарушая нормальную работу системы. И когда загружается рабочий стол, ситуацию уже сложнее исправить.

Разумеется, далеко не все вирусы работают по этой схеме, но тем не менее очистка временных файлов и кэша системы перед её выключением значительно снижает такие риски.

 /wait "" "C:\Program Files\CCleaner\CCleaner64.exe" /auto
 /wait "" "C:\WINDOWS\System32\shutdown.exe" /s /t 

Первой запускается программа CCleaner и удаляет все временные файлы на компьютере. Затем запускается программа выключения компьютера с задержкой в 15 секунд, чтобы избежать возможных конфликтов с работой CCleaner.

Необходимо создать BAT-файл и скопировать этот пример в него. Ярлык на bat-файл вывести на рабочий стол, назначить ему красивую иконку и выключать компьютер при помощи этого ярлыка-кнопки.

Получить список файлов в папке с помощью Bat-файла

Периодически пользуюсь bat-файлами для получения списков файлов в папках. Частая ситуация: по работе клиенты присылают от фотографа архив с фотографиями. Фотографии имеют названия в соответствии с артикулами товаров.

Никакой текстовой информации, сопровождающей фотографии нет. Необходимо сделать список на основе присланных фотографий и импортировать его в каталог товаров на сайте. Для каждого товара сделано по несколько фото. Они именованы так:

  1. Фото товара с артикулом А1234.jpg
  2. Фото товара с артикулом А1234 (2).jpg
  3. Фото товара с артикулом В1234.jpg
  4. Фото товара с артикулом В1234 (2).jpg

Сначала я получаю список всех файлов, находящихся в папке при помощи следующей команды:

 *.jpg /B /L > filelist.txt

Команда *.jpg позволит учитывать только JPG-файлы при составлении списка. Ключ позволит получить список, содержащий только имена файлов, находящихся в папке. Ключ выведет все имена в нижнем регистре. Команда создаст текстовой файл с именем filelist и запишет резутьтат туда.

Следующим шагом нужно избавиться от дублей, чтобы в списке осталось только по одной записи для каждого товара:

 filelist.txt |  /I /V "()" > temp.txt

Команда будет осуществлять поиск в ранее полученном файле. Ключ позволяет искать записи без учёта регистра, а ключ записывает строки, в которых отсутствует искомое совпадение. В кавычках указана строка, совпадение с которой нужно фиксировать. И последняя команда запишет в файл temp все результаты, не содержащие в имени “(2)”. В результате я получу:

  1. Фото товара с артикулом А1234.jpg
  2. Фото товара с артикулом В1234.jpg

И далее на основе этого текстового списка буду готовить файл для импорта.

Если вам понадобится провести обратную операцию – вывести в файл temp.txt только совпадения, то в списке команд () вы не найдёте нужной. Есть только обратный фильтр по точному совпадению – .

Для этой задачи можно воспользоваться командой вывода номера строк , в которых имеются совпадения (номера выводятся вместе со строкой):

 filelist.txt |  /I /N "()" > temp.txt

Главное при работе с текстовой информацией (текстовыми файлами) помнить один момент:

Если для текстовых операций вы в качестве исходника используете файл, который создали не через командную строку, он должен быть в кодировке, которая понимается командной строкой. Например, .

Иначе рискуете получить на выходе нечто такое:

неверная кодировка

Скопировать дерево каталогов без файлов

Когда я начинаю делать новые проекты, возникает необходимость получить дерево каталогов, аналогичное старому проектному с той разницей, что в ней не должно быть файлов. Для нового проекта проще добавить 3-5 файлов в нужные пустые папки, чем копировать существующий проект и удалять потом оттуда ненужное.

:/>  «Частота обновлений коллективных политики способы принудительного обновления таких политик на внешних компьютерах, работающих в домене Active Directory»

Получить дерево каталогов без файлов можно при помощи следующей команды:

 folder_1 folder_2 /T /E

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

Оптимально для получения дерева каталогов нужно открыть командную строку в родительской папке каталога-донора и в этой же папке создать каталог, в который будет помещено копируемое дерево. При этом команде достаточно будет указать имена папки-донора и папки назначения (как в примере выше).

Посчитать количество файлов в каталоге

Если нужно посчитать количество файлов в конкретно взятом каталоге, можно воспользоваться следующим кодом:

@ off
 /f   (' /b /a-d')   /a num+=
  folder  files

В подобных примерах часто вставляют строку chcp 1251 > nul, но я предпочитаю выводить все данные в кодировке по-умолчанию. У создаваемых bat-файлов она обычно определяется как OEM(DOS). Поэтому в выводе я использую латиницу и не заморачиваюсь. Для меня это актуально, когда присутствует работа с текстом, как в примерах выше. Команда pause нужна для того, чтобы успеть ознакомиться с результатом выполнения команды. После этого можно нажать любую клавишу и окно консоли закроется.

Если материалы сайта оказались для вас полезными, можете поддержать дальнейшее развитие ресурса, оказав ему (и мне ) моральную и материальную поддержку.

  • 25.01.2020
  • 28 249
  • 08.08.2022
  • 58

Пакетные BAT файлы

Описание

Пакетные файлы (иногда называемые bat, бат, batch, батник, батники) это обычные текстовые файлы, содержащие наборы команд интерпретатора и имеющие расширение *.bat. Редактировать такие файлы можно при помощи блокнота или любого другого текстового редактора, которым вы привыкли пользоваться. Они содержат последовательный набор команд, которые выполняются в определенном, заранее заданном, порядке. Для рядового пользователя знание принципов работы BAT файлов совершенно необязательно и редко когда требуется, но при выполнении каких-либо специализированных задач, использование пакетных файлов может очень сильно упростить жизнь и ускорить их выполнение.

Примеры bat файлов

С помощью пакетных файлов можно делать огромное количество различных действий, которые очень сложно/долго, а в некоторых ситуациях, просто невозможно выполнить без использования bat файлов, т.к. необходимо либо приобретать специальный софт под конкретную задачу (пример – массовая конвертация картинок в папке(ах) по ключу в названии, либо самостоятельно писать такую программу на каком-либо языке программирования, что сможет далеко не каждый, да и целесообразность этого, для разового действия минимальна. На нашем сайте есть несколько примеров использования пакетных файлов для решения специализированных задач, которые, возможно, смогут вам помочь.

Безопасно ли запускать bat файлы?

Ответ на этот вопрос зависит от того, насколько вы в состоянии понять содержимое пакетного файла, который хотите запустить. Если вы его автор, самостоятельно написали все команды и понимаете что эти команды делают, то конечно же запуск таких файлов совершенно безвреден для компьютера. НО, если вы получили такой файл по почте, скачали из интернета (особенно с сомнительного сайта) и т.д., то запускать его следует только в том случае, если вы доверяете тому, кто этот файл написал и дал вам, либо понимаете, что делают все команды, которые прописаны в нем. Так с помощью некоторых команд, которые могут быть написаны в .bat файле, можно полностью вывести из строя Windows, удалить важные данные, установить вирус или кейлоггер для кражи данных и много чего еще. Поэтому к этому вопросу надо подходить со всей ответственностью и понимать, чем это может грозить.

Как создать bat файл?

Для начала создадим папку test в корне диска C:\, чтобы в ней проводить наши эксперименты. Далее откройте блокнот (или любимый текстовый редактор) и наберите две следующих строки:

@echo my first bat file
@pause

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

Bat подсчет количества файлов в папке

Пример заполнения файла

Выберите ФайлСохранить как

Bat подсчет количества файлов в папке

Выберите Тип файлаВсе файлы, в поле Имя файла введите start.bat и сохраните его в папке test на диске С.

Bat подсчет количества файлов в папке

Все, наш первый bat файл создан и лежит по адресу C:\test\start.bat. Теперь нам осталось этот файл запустить и увидеть результаты его работы.

Как запустить bat файл?

Запустить .bat файл очень просто, это делается точно также, как и запуск .exe файлов. Для этого достаточно выделить нужный .bat файл в проводнике и дважды щелкнуть по нему левой кнопкой мыши.
Альтернативным вариантом запуска (чтобы случайно не запустить что то не то, например, в том случае, если в папке много файлов) может являться запуск bat файла в 2 этапа. Сначала выделяем нужный файл левой кнопкой мыши, далее нажимаем на правую кнопку мыши, чтобы вызвать контекстное меню, и в нем уже выбираем пункт меню Открыть

В нашем примере, мы переходим в папку test на диске C:\ и запускаем файл start.bat, который мы ранее написали.
Bat подсчет количества файлов в папке

После его выполнения на экран будет выведено две строки, как на скриншоте ниже:

Bat подсчет количества файлов в папке

результат выполнения файла start.bat

После нажатия любой клавиши окно закроется, т.к. bat-файл выполнен.
Обратите внимание, что символ собаки перед каждой командой в bat-файле указывает на то, что саму команду выводить на экран не надо, а нужно вывести только результат ее работы. Чтобы поэкспериментировать удалите символ собаки из начала каждой строки, сохраните и запустите полученный bat файл.

Команды, используемые в bat файлах

Описание и примеры использования некоторых самых популярных команд есть у нас на сайте, ознакомиться с ними можно по этой ссылке: Справочник команд Windows (CMD)

Список команд, которые можно использовать в bat-файлах, можно просмотреть, введя в командной строке команду help

В результате будет выведен список доступных команд и краткое описание к этим командам.

Bat подсчет количества файлов в папке

Для того, чтобы ознакомиться с описанием интересующей вас команды, необходимо в командой строке написать help команда. Например, чтобы получить подробную справку по команде copy, необходимо ввести:

help COPY

В результате, на экран будет выведена справка по команде COPY и доступные ключи.

Bat подсчет количества файлов в папке


Сообщения: 3

Благодарности: 0


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

Можно, конечно, поступить просто и в самом батнике жёстко прописать полный путь до каталога, в котором этот он лежит.

В bash-скрипте получится что-то вроде этого, но это не годится для Windows.
#!/bin/bash

# запуск “соседних” скриптов
./script1.sh
./script2.sh

Вполне рабочий вариант и две обозначенные выше проблемы будут решены, но если надо будет переместить скрипт в другой каталог, то и значение переменной придётся руками поменять в самом скрипте. Не очень удобно.

Для красивого решения проблемы нужно знать всего три вещи:

1.Путь до выполняющегося скрипта можно узнать с помощью $0, но проблема в том, что он относительный, т.е. если вы запустите скрипт как ./script.sh, то и $0 будет содержать ./script.sh
2.Команда readlink с параметром -e решит сразу две проблемы: во-первых она вернет полный путь до файла скрипта, если вы воспользовались для запуска символической ссылкой (даже если это была цепочка симлинков), а во-вторых преобразует относительный путь, если такой получен с помощью $0, в абсолютный
3.Чтобы избавиться от имени файла скрипта в конце абсолютного пути, нужно воспользоваться командой dirname

# полное путь до скрипта
ABSOLUTE_FILENAME=`readlink -e “$0″`
# каталог в котором лежит скрипт
DIRECTORY=`dirname $ABSOLUTE_FILENAME`

# запуск “соседних” скриптов
$DIRECTORY/script1.sh
$DIRECTORY/script2.sh

Либо если есть варианты в VBS, жду предложений. Заранее спасибо.

  • Kiber

Тема: CMD/BAT: организация универсальных путей через переменные среды

Наверняка многие из вас сталкивались с проблемами когда после переустановки системы, все 3,4,5 (нужное подчеркнуть) винчестеров перемешивают свои буквы, и старые ярлыки к утилитам уже не пашут. И варанта два: либо новые ярлыки, либо восстанавливать последовательность букв. Здесь прелагается частичное решение, в частности помогающее сделать ярлыки универсальными. Но в прицнипе несложно придумать и более широкое применение, в частности в задачах с портабельностью.
Сам скрипт в батнике, но манипулирует реестром:

cd %CD%\..\..\
SET REGDIR=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
REG ADD "%REGDIR%" /v _mymusic /t REG_SZ /d %CD%

%CD% – полный путь к текущему каталогу (Изначально – это каталог запуска скрипта). Скрипт на 2 уровня вложен в папку моей музыки. Поэтому первой строчкой скрипта выходим на 2 папки вверх, и затем заносим в реестр глобальную переменную _mymusic, тип значения REG_SZ, значение %CD%.
Чтобы получить значение глобальной переменной достаточно ее название заключить в %%.
В итоге, заменив в ярлыке абсолютный путь на относительный, получаем универсальный путь который заработает после переустановки системы и запуска нашего батничка. Например:
Абсолютный путь (“E:\mp3\Король и Шут”)
Относительный путь (“%_mymusic%\Король и Шут”)
Не попадите названием в системные переменные. Большинство из них:

ypppu

  • ypppu
:/>  Как изменить фон рабочего стола windows7. Делаем слайд-шоу и красивый фоновый рисунок

Re: CMD/BAT: организация универсальных путей через переменные среды

Манипуляции с реестром, описанные Kiber, позволяют перенести папку Temp на жёсткий диск. Тем самым продлевается жизнь SSD.

Malcev

  • Malcev

Re: CMD/BAT: организация универсальных путей через переменные среды

Я бы не рекомендовал так делать.
Будет сказываться на скорости.

teadrinker

  • teadrinker

Re: CMD/BAT: организация универсальных путей через переменные среды

А это действительно нужно было в Коллекции обсуждать? Если хотите, можно отменить правило комментирования в Коллекции, создавайте тему для голосования. Если нет, то Kiber или ypppu, создайте тему для обсуждения, оставьте здесь ссылку, я перенесу сообщения. Ну или просто удалю.

Move

Служит для перемещения одного или нескольких файлов из одного каталога в другой.

Синтаксис

move [{/y|/-y}] [источник] [результат]

Параметры

/y
Запрет на выдачу запроса подтверждения перезаписи существующего файла-результата.
/-y
Выдача запроса подтверждения перезаписи существующего файла-результата.
источник
Путь и имя одного или нескольких файлов для перемещения. Если требуется переместить или
переименовать каталог, в качестве источника должен быть указан путь к текущему
каталогу и его имя.
результат
Путь и имя, куда требуется переместить файлы. Если требуется переместить или переименовать
каталог, в качестве результата должен быть указан путь к конечному каталогу и его
имя.
/?
Отображение справки в командной строке.

Заметки

  • Использование параметра командной строки/y

    Параметр командной строки /y может быть установлен заранее в переменной среды
    COPYCMD. Значение может быть переопределено параметром /-y в командной строке. По
    умолчанию если команда copy выполняется не в пакетной программе, при замене
    требуется подтверждение.

  • Перемещение зашифрованных файлов

    При перемещении файлов на том, не поддерживающий шифрованную файловую систему (EFS),
    возникнет ошибка. Следует предварительно расшифровать файлы или переместить их на том,
    поддерживающий EFS.

Примеры

Чтобы переместить все файлы с расширением XLS из каталога \Data в каталог \Second_Q\Reports,
введите:

move \data\*.xls \second_q\reports\

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).

дата в имени

Копирование файлов или каталогов (папок), в имени которых присутствует дата.

Как показала практика, на форуме
возникают много вопросов, касающихся копирования файлов или каталогов (папок), в имени которых есть дата.
Т е bat / cmd файл должен учитывать, что имя источника или (и) имя назначения не статичны.
В них присутствуют элементы даты.

Для начала несколько слов о том, как мы будем получать элементы даты в bat / cmd файле.
Я умышленно изложил его, как мне кажется, излишне подробно, ориентируясь почти на начинающего “сценариста”.
Как раз из-за вопросов, которые задают в форуме и при переписке.
Поэтому, если вам это знакомо – просто пропустите этот параграф.
Или проверьте мои знания, способ изложения материала. Буду благодарен за конструктивную критику.

Получение элементов даты в bat / cmd файле

В числе системных переменных есть переменная
%date%, которая содержит текущую дату.

Если в окне командного процессора ввести команду

то вывод будет примерно таким:
15.10.2014
Для получения отдельных значений номера дня, месяца и года используется операция извлечения подстроки.

Так,

выведет подстроку, начиная с 6-го символа (символы нумеруются, начиная с 0)
т. е. для даты 15.10.2014 это будет 2014 – четырехзначный год.
Это же значение можно получить и следующей командой –

– извлечь четыре последних символа из строки.

соответственно, выведет 14 – двухзначный год.
Можно по аналогии использовать два последних символа строки

Различные варианты извлечения года мы рассмотрели. На очереди – день и месяц.

или это же можно записать так

выведет первые два символа строки – т. е. в данном случае номер дня.
Ну и

извлечь два символа, начиная с третьего – выведет номер месяца.

Таким образом, для большей наглядности или если элементы даты используются в сценарии неоднократно,
то можно использовать промежуточные переменные:

Следует все же отметить, что такой формат вывода даты используется в операционных системах
более поздних, чем windows 2000.
Для тех счастливых (часов не наблюдающих) и безмятежных людей,
которые эксплуатируют эту или более ранние версии, упомяну, что работа с датой и механизм извлечения
элементов даты будет несколько отличаться.
На всякий случай приведу и его. Скорее для истории.

Не использовать для других операционных систем!

Выше были рассмотрены различные варианты получение элементов даты в bat / cmd файлах.
И теперь можно приступать собственно к работе с файлами и папками (каталогами),
в именах которых присутствуют элементы даты.

Копирование файлов, в имени которых присутствует дата.

copy c:\my\%date:~6%%date:~3,2%%date:~0,2%.rar d:\backup\

Если формат даты требуется такой – DDMMYY, то команда будет выглядеть так:

copy c:\my\%date:~0,2%%date:~3,2%%date:~8%.rar d:\backup\

Или то же самое, если были определены переменные:

copy c:\my\%DD%%MM%%YY%.rar d:\backup\

Копирование в файл или каталог (папку), в имени которых присутствует дата.

Аналогично можно поступать если необходимо скопировать файл в каталог или файл,
в имени котором присутствует дата.

copy c:\log\current.log c:\arh\%date:~0,2%%date:~3,2%%date:~8%.log

Довольно часто это так же используется и для создания архивов.

arj a c:\my\%date:~6%%date:~3,2%%date:~,2%.arj d:\a\*.*

В приведенном примере создается архив с именем даты в формате YYYYMMDD.

Для проверки наличия и создания при необходимости каталога, в имени которого присутствует дата,
можно использовать такой код:

set PATHARHDAY=d:\arhive\%date:~6%%date:~3,2%%date:~0,2%
if not exist %PATHARHDAY% (
md %PATHARHDAY%
)

Теперь в такой каталог можно копировать/перемещать файлы

move d:\temparh\*.* %PATHARHDAY%\

(Здесь, как и в других примерах, не проверяется код возврата команды,
что не всегда приемлемо при написании “боевых” сценариев).

Если источник и (или) приемник находятся на сетевом диске и адрес
его начинается с двух слэшей, то необходимо использовать команду
xcopy.

Копирование файлов по дате создания

В некоторых случаях удобно копировать файлы, созданные (модифицированные) сегодня.
Для этого даже нет необходимости знать их имена.

Конечно, можно написать собственный bat / cmd сценарий, который будет перебирать файлы требуемого каталога,
извлекать дату создания файла, сравнивать с текущей и,
при необходимости, копировать в каталог назначения.
Но в операционной системе уже есть достаточно мощные средства, позволяющие выполнять такие действия.
Их сейчас мы и рассмотрим.

xcopy d:\input d:\output /D:%date:~3,2%-%date:~0,2%-%date:~8%

Все файлы созданные (модифицированные) сегодня будут скопированы
из каталога d:\input в d:\output

Такая команда скопирует все файлы сегодня созданные из папки N:\arhive в папку M:\SUPERARHIVE.

Если в предыдущем примере вместо copy использовать команду move,
то такие файлы будут не скопированы, а перемещены.

И еще одна возможность – скопировать файлы, возраст которых не превышает одного дня

robocopy “d:\input” “d:\output” /maxage:1

robocopy “d:\input” “d:\output” /maxage:%date:~6%%date:~3,2%%date:~0,2%

Надеюсь, что информация этого раздела помогла решить хотя бы часть проблем,
связанных с копирование файлов или каталогов (папок), в имени которых присутствует дата.
Если остались вопросы – задавайте их на форуме.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).

Команда MOVE – переименование или перемещение файлов и каталогов

MOVE

Перемещение одного или более файлов:

Параметры командной строки:

Назначение – Определяет новое местоположение файла. Назначение может состоять из буквы диска (с последующим двоеточием), имени папки или их комбинации. При
перемещении только одного файла, можно указать и его новое имя, если хотите выполнить его одновременное переименование при перемещении.

новое_имя_папки – Определяет новое имя папки.

/Y – Перезаписывать существующие файлы назначения без предупреждения.

/-Y – Предупреждать при перезаписи существующего файла назначения.

Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD.
Оно может перекрываться ключом /-Y в командной строке. По умолчанию
используется предупреждение о перезаписи, если только команда MOVE не
выполняется как часть пакетного файла.

move /? – отобразить подсказку по использованию команды.

move folder1 folder2 – переименовать папку с именем folder1 в folder2 в текущем каталоге.

move E:\test\folder1 E:\test\folder2 – переименование с указанием абсолютных путей.

move C:\file1.txt D:\ – переместить файл file1.txt с диска C: на диск D:

move c:\test\file1.txt D:\folder2\file2.txt – перенести файл file1.txt из каталога
test диска C: в каталог folder2 диска D: под именем file2.txt

move C:\Folder1\*.* D:\Folder2\ – переместить все файлы из каталога Folder1 диска C: в каталог Folder2 диска D:

Реализация в ОС Windows данной команды не позволяет перемещать папки на другие логические диски.

move C:\folder1 C:\folder2\folder3\folder1 – переместить каталог folder1 из корня диска C: в подкаталог \folder2\folder3

При перемещении папки в несуществующий каталог он не будет создан автоматически и команда завершится ошибкой.
Команда move не работает с файлами, имеющими атрибуты “скрытый ” и “системный”.


Весь список команд CMD Windows

Оставьте комментарий