আমি কিভাবে একটি ব্যাচ ফাইলে ডিরেক্টরি ঠিকানাগুলি (পুনরাবৃত্তিমূলক) বিভক্ত করব?


0

আমার কাছে অডিও নমুনার ফোল্ডার রয়েছে এবং আমি যা ব্যবহার করি না সেগুলি মুছে ফেলতে চলেছি, তবে আমি একটি SQLite ডাটাবেসের মূল উপাদানগুলির একটি রেকর্ড চাই।

বর্তমানে, আমি সরাসরি ডেটাবেসে লিখছি, কিন্তু আমি মনে করি .CSVফাইলটিতে লেখার এবং ডাটাবেসের মধ্যে আমদানি করা আরও দ্রুত হবে কারণ শত শত ফাইল রয়েছে।

পরীক্ষা করার জন্য আমার ফাইল সিস্টেম + ডামি ফাইলগুলির মত ডিরেক্টরি ট্রি তৈরি করতে এই ব্যাচ কোডটি ব্যবহার করুন। যেখানেই আপনি ফাইলটি চালান সেখানেই এটি তৈরি হবে। (আমার ক্ষেত্রে, শীর্ষ ফোল্ডারটি নামকরণ করা হয়েছে Testing:

SET "BigFish=Z. Unsorted\Big Fish Audio\Midnight Jazz Train\Brass and Winds"
SET "Fragments=Z. Unsorted\Loopmasters\Fragments 02\FR2_SOUNDS_&_FX\FR2_BASS"
SET "LCycles=Z. Unsorted\Loopmasters\Hip-Hop Lunar Cycles\LUN_SYNTH_MELODY_LOOPS"

FOR %%A IN (Tenor_Sax, Trumpet) DO MD "%BigFish%\%%A"
MD "%Fragments%"
MD "%LCycles%"

@echo justtestjunk > "%Fragments%\loop.wav"
@echo justtestjunk > "%LCycles%\drum.aiff"
@echo justtestjunk > "%LCycles%\file.txt"
FOR %%A IN (Tenor_Sax, Trumpet) DO echo justtestjunk > "%BigFish%\%%A\data.sql"

সহায়তায়, আমি একটি ডাটাবেস তৈরি করতে এবং কিছু এন্ট্রি করতে পরিচালিত করেছি, তবে আমার আউটপুট নিম্নরূপ দেখায় (শুধুমাত্র প্রথম সারির নমুনা):

loop.wav, Testing, Z. Unsorted, Loopmasters, Fragments 02, 15

যখন আমি চাই এই হল:

loop.wav, Loopmasters, Fragments 02, FR2_SOUNDS_&FX, FR2_BASS, 15

আমি সমস্যা কোড মধ্যে delimiting সঙ্গে মনে হয় । এছাড়াও, আমি একটি Typeমান অনুপস্থিতির জন্য কোডটি প্রয়োজন (এটি রেখে NULL)

তাই ...

বর্তমান কোড

@echo off

setlocal enabledelayedexpansion

SET fld="Z. Unsorted"

sqlite3 %fld%\TestDb.sqlite "CREATE TABLE IF NOT EXISTS \"Samples\" (File TEXT NOT NULL, Publisher TEXT, Pack TEXT NOT NULL, Category TEXT, Type TEXT, Size INT);" 

for /r %fld% %%A in (*.aiff *.wav) do (
    call :part "%%~dpA"

    set "File=%%~nxA"
    set "File=!File:'=''!"

    sqlite3 %fld%\TestDb.sqlite "INSERT OR REPLACE INTO \"Samples\" VALUES ('!File!', '!Publisher!', '!Pack!', '!Category!', '!Type!', '%%~zA');"

    @echo '!File!', '!Publisher!', '!Pack!', '!Category!', '%%~zA'
)

PAUSE

:part
    for /f "tokens=6-10 delims=\" %%A in ("%~1") do (
        set "Publisher=%%~A"
        set "Publisher=!Publisher:'=''!"

        set "Pack=%%~B"
        set "Pack=!Pack:'=''!"

        set "Category=%%~C"  
        set "Category=!Category:'=''!"

        set "Type=%%~D"  
        set "Type=!Type:'=''!"
    )

@ music2myear আমি আমার প্রশ্ন সম্পাদনা করেছি। আমি বিভিন্ন দিক চেষ্টা করছি এবং খুব দূরে না। আমি আমার মাথা উপর আছি। একটি শুরু বিন্দু পাথ পৃথক অংশ পেতে কিভাবে খুঁজে বের করা হবে।
২২:52 এ জোহান

@ music2myear আমি SQLITE ডাটাবেস সংস্করণে একটু বেশি পেয়েছি। আমি প্রতিটি প্রকাশক ফোল্ডারে আমি যে কলামগুলি চাই সেগুলির সাথে একটি SQLITE ডাটাবেস তৈরি করেছি, তবে আমি তথ্য দিয়ে তাদের পূরণ করতে জানি না।
জোহান

আমার মনে হয় আপনি ভুল টোকেন এবং ভেরিয়েবল উল্লেখ করা হয় - এই জন্য গৃহীত উত্তর চেক - এবং প্রয়োজনে ব্যাকস্ল্যাশ অব্যাহতি স্মরণ - stackoverflow.com/questions/15535424/... । এছাড়াও, আপনি বিভিন্ন সিকিএল ডেটাবেসগুলি ব্যবহার করতে চান না, শুধুমাত্র একটি টেবিলের সাথে এক, যেহেতু আপনি কোনও কলামের মাধ্যমে আপনার ডেটা উপসেট পেতে পারেন।
ivanivan

@ ইভিনিভান আমি উত্তরটি দেখেছি। কোন অংশ আমাকে সাহায্য করতে হবে? - এবং আমি ডাটাবেসের ধারণা প্রয়োগ করব।
জোহান

আপনি যদি আলাদাভাবে জিজ্ঞাসা করেন তবে এই প্রশ্নটিকে আরও সহজ করে তুলতে পারেন A) কিভাবে আপনার ডেটা একটি CSV তৈরি করবেন তারপরে একবার এটি সম্পন্ন হয়ে গেলে, B) সিএসভি কিভাবে SQLite- এ আমদানি করতে হয়
Barlop

উত্তর:


1

আমি স্ট্যাকওভারফ্লো-তে পোস্ট করেছি এবং একটি সমাধান দেওয়া হয়েছিল ।

নোট করুন যে স্ক্রিপ্ট নমুনা ফোল্ডারের একই ডিরেক্টরিতে স্থাপন করা উচিত এবং আমার উদাহরণ হিসাবে নমুনা ফোল্ডার গঠন আছে।

আমি ব্যাচ ফাইল একটি মৌলিক, clunky ব্যাখ্যা করা।

@echo off

setlocal enabledelayedexpansion

@echo This script will create an SQLite database of .wav or .aiff samples in the folder you select
@echo( 
@echo the script must be placed in the same directory as your sample folder.
@echo(
@echo Columns will be populated based on the following file structure: 
@echo(
@echo SampleFolder\Publisher\PackName\SampleCategory (i.e. Ambience)\SampleType (i.e. Rain)\Filename.wav
@echo(

set /p "fld=What is the name of your sample folder? "

> "%fld%\SampleDb.sql" (
    echo BEGIN;
    echo CREATE TABLE IF NOT EXISTS "Samples" ^(File TEXT NOT NULL, Publisher TEXT, Pack TEXT NOT NULL, Category TEXT, Type TEXT, Size INT^);
)

for /r "%fld%" %%A in (*.aiff *.wav) do (
    set "relative_path=%%~dpA"
    set "relative_path=!relative_path:%cd%=!"
    if "!relative_path:~,1!" == "\" set "relative_path=!relative_path:~1!"

    call :part "!relative_path!"

    set "File=%%~nxA"
    set "File='!File:'=''!'"

    >> "%fld%\SampleDb.sql" echo INSERT OR REPLACE INTO "Samples" VALUES ^(!File!, !Publisher!, !Pack!, !Category!, !Type!, %%~zA^);

    @echo !File!, !Publisher!, !Pack!, !Category!, !Type!, %%~zA
)

>> "%fld%\SampleDb.sql" echo COMMIT;

sqlite3 -cmd ".read '%fld%\SampleDb.sql'" "%fld%\SampleDb.sqlite" ""

pause
exit /b

:part
    for /f "tokens=2-5 delims=\" %%A in ("%~1") do (
        set "Publisher=%%~A"
        if defined Publisher (
            set "Publisher='!Publisher:'=''!'"
        ) else set "Publisher=NULL"

        set "Pack=%%~B"
        if defined Pack (
            set "Pack='!Pack:'=''!'"
        ) else "Pack=''"

        set "Category=%%~C"
        if defined Category (
            set "Category='!Category:'=''!'"
        ) else set "Category=NULL"

        set "Type=%%~D"
        if defined Type (
            set "Type='!Type:'=''!'"
        ) else set "Type=NULL"
    )
exit /b
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.