2017-02-11 3 views
0

Какой самый простой способ иметь пакетный файл для загрузки длинных списков данных? Сейчас я загружаю мой из отдельного текстового файла, но я подозреваю, что это медленнее, чем данные в том же файле, что и, например, загружаются одновременно с программным кодом. Есть ли лучший способ справиться с этим, чем то, что я делаю сейчас, что это:У Windows Batch есть что-то похожее на инструкцию данных «BASIC»?

for /f "usebackq delims=" %%g in (list.txt) do (if exist "%%g.jpg" del "%%g.jpg") 
+0

Определить вспомогательный шпур/лучше. Легче читать/поддерживать/понимать для вас/более поздних пользователей/компьютеров? В вашем коде 'usebackq' и круглые скобки вокруг if не требуются. – LotPings

+0

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

+0

Нет необходимости в 'if exist'. И вы вынуждаете два чтения диска и запись на диск вместо одного и одного. Просто удалите файл. Если он не существует, ничего не изменится, если он его удалит. – Freddie

ответ

1

Ну давайте попробуют еще один тупой способ прочитать список. Получил эту технику, которую я считаю от Aacini на форумах Dostips.com. Максимальное количество символов, которое вы можете иметь для команды SET, чтобы оно не срабатывало при попытке назначить многие записи.

@echo off 
setlocal EnableDelayedExpansion 

set str=file1.txt?^ 
file2.txt?^ 
file 4.txt?^ 
file5.txt?^ 
some other file.jpg?^ 
and yet another file.mp3? 

for /F "delims=" %%s in (^"!str:?^=^ 
%= Replace question with linefeeds =% 
!^") do (
    echo %%~s 
) 
pause 

Выход

file1.txt 
file2.txt 
file 4.txt 
file5.txt 
some other file.jpg 
and yet another file.mp3 
Press any key to continue . . . 

Я проверил все три набора кода и потому, что наборы данных настолько малы, разница во времени ничтожно мало на моей машине. Я использовал 36 строк для набора данных и запустил код для запуска 10 раз.

Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.79 Seconds 
Squashman time is 0.79 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.79 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.62 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.94 Seconds 
Wally time is 0.79 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.94 Seconds 
Wally time is 0.79 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.78 Seconds 
Wally time is 0.78 Seconds 
Squashman time is 0.78 Seconds 
Magoo time is 0.78 Seconds 
Press any key to continue . . . 
2

Вот способ сделать то, что вы спрашиваете:

@ECHO OFF 
SETLOCAL 
SET "data=" 
FOR /f "usebackqdelims=" %%a IN ("%~f0") DO (
IF /i "%%a"=="[enddata]" SET "data=" 
IF DEFINED data ECHO execute command ON "%%a" 
IF /i "%%a"=="[data]" SET "data=Y" 
) 

GOTO :EOF 

[data] 
some filename.jpg 
MORE data.jpg 
[enddata] 

Ну - это слишком сложно. Очевидно, что объект [enddata] может быть удален, но это позволяет гибкость (два или более разделов данных, [data1] [data2] и т. Д., Каждый со своим сектором конечных данных)

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

лучше подходит для «прошивки» -style данных - полупостоянный как список серверов, - а не динамические данных, но вы платите свои деньги, вы принимаете ваш выбор ...

+0

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

3

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

@echo off 

for %%g in (file1 file2 file3 "A long file name with spaces" 
      fileN fileM) do (
    del "%%~g.jpg" 
) 
+0

Если в одном из имен файлов нет запятой или точкой с запятой. Тогда вам нужно будет указать все имена файлов. – Squashman