1 (изменено: vivexce, 2023-04-21 21:01:45)

Тема: CMD/BAT: Создание имен файлов по маске.

Есть bat, который берет все называния файлов из папки и названия закидывает в files.txt


chcp 1251
cd /d E:\\Videos
dir /b /d >>files.txt

Получается в итоге в файле files.txt так:


107.mp4
108.mp4

Нужно чтобы названия с маской создавались вот так!


file '107.mp4'
file '108.mp4'

Как такой батник соорудить?)))

2

Re: CMD/BAT: Создание имен файлов по маске.

Например, используя sed:

dir /a-d /b | sed "s/\(.*\)/file '\1'/"

3

Re: CMD/BAT: Создание имен файлов по маске.

Есть много способов получить желаемое. Как уже показал коллега greg zakharov - с помощью внешних утилит

Небольшая модификация его команды

dir /b /a-d | sed "s/.*/file '&'/"

Я же предпочитаю busybox

dir /b /a-d | busybox sed "s/.*/file '&'/"
====

Можно написать отдельный js-файл и вызывать его в конвейере (я его назвал sed-like.js, вы вольны назвать его по своему)

dir /b /a-d | cscript //nologo sed-like.js

И скрипт можно реализовать разыми вариантами

Вариант 1


while ( ! WScript.StdIn.AtEndOfStream ) {
	WScript.StdOut.WriteLine(
		WScript.StdIn.ReadLine().replace(/(.*)/, "file '$1'")
	);
}

Вариант 2


WScript.StdOut.WriteLine(
	WScript.StdIn.ReadAll().replace(/^([^\r\n]+)/gm, "file '$1'")
);
====

Ну и классика жанра - ванильный батник

for /f "tokens=*" %%f in ( 'dir /b /a-d' ) do echo:file '%%f'
( 2 * b ) || ! ( 2 * b )