Tworzę skrypt, który tworzy plik w bieżącym katalogu.

@echo off
set /p file= filename and extension: 
echo something_test >> %file%

Ale powiedzmy, że obecny katalog to:

INSIDE (fo) main_folder: {
    (fi) script.bat
    (fo) somefolder
}

(Fi = plik i folder fo =; skrypt.bat to skrypt, który wykonuję)

Jeśli uruchomię skrypt i wprowadę file.txt, (fi) plik.txt zostanie utworzony w (fi) głównym katalogu skryptowym (

Teraz powiedzmy, że chcę go utworzyć w środku (na) jakiś folder.

Oczywistą rzeczą byłoby to zrobić:

@echo off
cd somefolder
set /p file= filename and extension: 
echo something_test >> %file%

Następnie; Jeśli uruchomię skrypt i wejście plik.txt, (fi) file.txt zostanie utworzony w (fi) script.bat's Directory roboczej ((FO) Somefolder).

Ale to, co chcę zrobić, to, wystarczy wprowadzić do polecenia SET / P, utwórz plik w (dla) niektórych folderów, bez użycia polecenia CD.

I jak, po prostu wprowadzając do polecenia SET / P, utwórz plik w głównym katalogu (FO) Main_Folder, bez użycia polecenia cd..?

0
DarkVeneno 31 grudzień 2019, 15:28

1 odpowiedź

Najlepsza odpowiedź

W głównym skrypcie przed wywołaniem jakichkolwiek funkcji, użyj:

Set "Prog_Dir=%~dp0"

REM %~dp0 Expands to the directory which the Batch is run in - The folder it's in.

Set "somefolder=%Prog_Dir%somefolder"

Aby utworzyć plik w skryptach Dir:

(
ECHO Your text
) >"%Prog_Dir%\filename.ext"

Aby utworzyć plik w skryptach SUBR:

(
ECHO Your text
) >"%somefolder%\filename.ext"

Takie podejście do stosowania względnych ścieżek zapewnia, że skrypt będzie działał zgodnie z nierównami, gdzie znajduje się folder skryptów.

Aby użyć Set / P, aby dostosować katalog, użyj go do testowania wartości. NA PRZYKŁAD:

Set \p StoreLocation=[1: MainDirectory 2:SomeFolder]
IF %StoreLocation%==1 Set "SaveLoc=%Prog_Dir%"

IF %StoreLocation%==2 Set "SaveLoc=%somefolder%\"

I zmień metodę sklepu do:

(
ECHO Your text
) >"%SaveLoc%filename.ext"

Polecam jednak korzystanie z wyboru w funkcji kalkulacyjnej, aby zmienić wartość za pomocą SET / P.

1
T3RR0R 2 styczeń 2020, 11:43