Batch wycinanie pierwszej litery z nazwy pliku

Witam ma problem ze skryptem w batchu , mianowicie nie chce utworzyć folderów z pierwszymi literami nazw plików. Proszę o pomoc w dokończeniu zadania.

@echo off

setlocal EnableDelayedExpansion
set /p sciezka=Podaj sciezke do przeszukania
if not exist “%sciezka%\backup” (mkdir %sciezka%\backup
)
echo %sciezka%
set name=%date%
if not exist “%sciezka%\backup%name%” (mkdir %sciezka%\backup%name%
)

set /p rozszerzenie= Podaj rozszerzenie do poszukiwania

for /r %sciezka% %%g IN (*."%rozszerzenie%") do (
echo %%g

for %%c IN ("%%g") do (

set word=%%~nc
set firstleter=%word:~0,1%
set lit=%firstleter%
echo %lit%
if not exist “%sciezka%\backup%name%%firstleter%” (mkdir %sciezka%\backup%name%%firstleter%
)

)
)
pause

endlocal

Poniżej dołączam jak powinien działać program ora materiały do zadań w załączniku.DaneDoZadan.zip (47,1 KB)

PRZYKŁAD
Jeżeli system wyszukał dwa pliki o rozszerzeniu jpg o nazwach:
brytyjski.jpg
dachowiec.jpg

To skrypt ma stworzyć strukturę katalogów :
.\BACKUP
└───18.03.2020
├───b


├───d

Następnie skrypt skopiuje odnalezione pliki dopasowując je do katalogów utworzonych w podkatalogu backup[bieżąca_data] - dopasowanie po pierwszej literze nazwy:

PRZYKŁAD
Jeżeli system wyszukał dwa pliki o rozszerzeniu jpg o nazwach:

)

)
brytyjski.jpg
dachowiec.jpg

to drzewko powinno wyglądać jak poniżej

.\BACKUP
└───18.03.2020
├───b
│ brytyjski.jpg

├───d
│ dachowiec.jpg

Skrypt ma wyświetlać informacje:
a) prośbę o podanie ścieżki przeszukiwania
b) prośbę o podanie rozszerzenia - w postaci bez wzorca, np. jpg a nie *.jpg

Skrypt ma być BEZPIECZNY:
a) jeśli użytkownik poda ścieżkę, która nie istnieje - system ma poinformować go o błędzie i przerwać działanie.
b) jeśli użytkownik nie rozszerzenia - również skrypt powinien poinformować o błędzie i przerwać działanie

Z innej beczki, zapytaj proszę nauczyciela czy potrafi to napisać w powershell.
Z głowy bez sprawdzania:

dir | %{ 
    $litera = $_.Name.SubString(0,1); 
    if(-not (Test-Path $litera)) {mkdir $litera}; 
    mv $_ "$litera\$_";}

To jakbyś po chińsku zdawał język angielski…

A bo wkurza mnie to, że zapomniając już o tym, że sam batch odszedł do lamusa, to jeszcze jego chora składnia i samo to, żeby zrobić sleepa trzeba puścić kilka pingów do dev nulla. ech.

Ktoś z was wie jak to zrobić bo ten kod w powershellu.

użwaj sobie prostej metody: zamiast
mkdir %sciezka%\backup%name%%firstleter%

Wpisz:
echo %sciezka%\backup%name%%firstleter%

To mi przecież wypisze ścieżkę nie utworzy katalogu z pierwszą literą. Jak mi to ma w tym pomóc?

A co wyświetla?

To taki debug w poszukiwaniu gdzie jest błąd.

Ja sobie też ECHO-uje wynik i PAUSE-uje żeby sprawdzić czy prawidłowo się zachowuje skrypt

Już tłumaczę dokładnie w czym jest problem.
Problem jest mianowicie przy zmiennej firstleter ta zmienna musi być w ! aby pobrała1 literę następnie problem pojawia się przy mkdir tam gdzie ma być utworzony folder z literą gdyż albo utworzy folder poza to ścieżka podana czyli tam gdzie jest plik albo wcale.
Wie ktoś jak naprawić? Jak wstawić te ! zamiat % aby działało wszystko poprawnie?

!firstleter!

Jak to zrobię to utworzy foldery ale poza ścieżka utworzona czyli tam gdzie znajduje się plik. I utworzy tylko foldery z pierwszymi literami plików.

(mkdir %sciezka%\backup%name%%firstleter%)

Bo tu jest błąd !
(mkdir %sciezka%\backup%name%\%firstleter%)

Chłopak się nie chce nauczyć do czego służy:
echo w linjce poniżej będzie tworzy folder za pomocą polecenia:
echo mkdir %sciezka%\backup%name%%firstleter%
pause

@bachus
mkdir %sciezka%\backup%name%\!firstleter!

Silnik forum intenrpretuje dziwnie %\% jako %% i ja tu widzę błąd
Trzeba to wklejać jako tekst sformatowany

Nie, po prostu musisz formatować kod, “jak kod” - a nie na lenia wklejać/wpisywać, piszesz z komórki to sobie może wtedy odpuść pomoc?

@echo off

setlocal  EnableDelayedExpansion
set /p sciezka=Podaj sciezke do przeszukania 
if not exist "%sciezka%\backup" (mkdir %sciezka%\backup
)
echo %sciezka%
set name=%date%
if not exist "%sciezka%\backup\%name%" (mkdir %sciezka%\backup\%name%
)

set /p rozszerzenie= Podaj rozszerzenie do poszukiwania 

for /r %sciezka% %%g IN (*."%rozszerzenie%") do (
echo %%g

for %%c IN ("%%g") do (

set word=%%~nc
set firstleter=%word:~0,1%
set lit=!firstleter!
echo %lit%
if not exist "%sciezka%\backup\%name%\%firstleter%" ( echo mkdir %sciezka%\backup\%name%\!firstleter!
)

)
)
pause

endlocal    

Jak zrobię z ! to wyświetla nic echo jest puste wina !firstletter! nie wiem jak to naprawić.

A co wyświetla echo %firstleter% ?

Pusty jest jak dam w wykrzykniki i dam w echo to wypisuje.

Sprawa rozwiązana na innym forum.