Proszę o kilka rad związanych z pseudo programowaniem w batch

Mam nadzieje że Panu Dimatheus  podoba się tytuł.

 

Witam, chcę za pomocą pliku batch stworzyć kilka przydatnych mi rzeczy. Jednak moja wiedza jest bardzo skąpa jeżeli chodzi o ten pseudo język.

 

Proszę o podanie odpowiedzi na niżej wymienione sytuacje / pytania:

 

-Jak, co użyć aby batch odczytywał informacje z innych plików.

Podaję przykład: Mam jakiś plik batch, który wyświetla liczbę, znak zapisany w osobnym pliku tekstowym.

 

-Jak, co użyć aby plik batch po uruchomieniu nie pokazywał konsoli.

Podaję przykład: Uruchamiam plik batch, który kopiuje kilka plików. Zamiast wyświetlać mi co robi ma się nie pokazać, pracować nie widoczny.

 

-Jak używać funkcji copy albo xcopy, która jest lepsza i do czego służy. (znam podstawy ale w przypadku mojego projektu nie wystarczają)

 

-Jak przy użyciu copy, xcopy skopiować plik z folderu o 1 wyżej niż program kopiujący bez konieczności przepisywania całej ścieżki (c:…). 

Podaję przykład: Mam program który kopiuje plik z 1 folderu do 2. Drzewko folderowe wygląda tak /cel/program/plik_do_skopiowania

a kod wygląda tak:

@ech off
copy \plik_do_skopiowania\plik.txt c:\user\Cycu\pulpit\cel\
echo.
echo Skpiowano
echo.
pause>nul
exit

Jak pozbyć się właśnie tego “c:\user\Cycu\pulpit\cel” bo chcę w końcu skopiować plik o 1 folder wyżej nie zależnie gdzie będzie to całe drzewko “/cel/program/plik_do_skopiowania”. Nie wiem czy dobrze napisałem kod.

batch read files - 53 mln wyników w google, w czym jest problem bo nie widzę sensu kopiowania wiedzy zapisanej na innych forach, manualach czy tutorialach z batch

 

np.

  1. Create a shortcut to the .BAT or .CMD file. To do so, right click on the file, click Send To, Desktop (create shortcut)

A możesz powiedzieć mi czemu to nie działa?

 

Mam plik config.txt napisane jest w nim:

number_1

number_2

number_3

number_4

 

Mam również plik batch który wygląda tak:

@echo off

for /f "tokens=1" %%i in (config.txt) do (
	set w1=%%i
	)
for /f "tokens=2" %%j in (config.txt) do (
	set w2=%%j
	)
for /f "tokens=3" %%k in (config.txt) do (
	set w3=%%k
	)
for /f "tokens=4" %%l in (config.txt) do (
	set w4=%%l
	)

echo.
echo %w1%
echo %w2%
echo %w3%
echo %w4%
	
echo.
pause>nul

Ten skrypt teoretycznie powinien wyświetlić wszystkie te nazwy z pliku config.txt ale pokazuje tylko 1 a reszta to ECHO jest wyłączone. Jak to ominąć?

Nie prawda ten skrypt nie ma prawa wyświetlić to o czym piszesz. 

 

tokens=3 oznacza że z linijki 

a b c d e

wybierze wartość “c” (spacja jest chyba default delimiters ale radzę sprawdzić w maunalu)

 

jak ze swojego skryptu usuniesz 2, 3 i 4 for to wynik nie zmieni się.

 

Na szybko napisałem coś takiego:

@echo off
setlocal EnableDelayedExpansion 

set _tst=0
for /f "tokens=1" %%i in (config.txt) do (
IF !_tst! == 0 set w1=%%i
IF !_tst! == 1 set w2=%%i
IF !_tst! == 2 set w3=%%i
IF !_tst! == 3 set w4=%%i
set /a _tst+=1
)
echo %w1%
echo %w2%
echo %w3%
echo %w4%

pause>nul

średnio to ładne ale działa.

 

W batch pisze bardzo sporadycznie więc jak ktoś ma lepszą propozycję to też chętnie zobaczę.