• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Windows skrót do tworzenia pliku o zadanej nazwie

Aruba Cloud - Virtual Private Server VPS
0 głosów
87 wizyt
pytanie zadane 3 lutego w Systemy operacyjne, programy przez TOWaD Mądrala (6,420 p.)
@echo off
rem Uzyskaj nazwę pliku, który został kliknięty
set "source_file=%~1"

rem Ścieżka do folderu kopii zapasowych (bieżący katalog)
set backup_folder=%cd%

rem Uzyskaj nazwę pliku bez ścieżki i rozszerzenia
set "file_name=%~n1"
set "file_ext=%~x1"

rem Funkcja do sprawdzania istnienia pliku i dodawania numeracji
setlocal enabledelayedexpansion
set "new_file_name=%file_name%%file_ext%"
set "i=0"

rem Sprawdź, czy nazwa pliku zawiera już numer w nawiasie
for /f "tokens=1 delims=()" %%a in ("%file_name%") do set "basename=%%a"
for /f "tokens=2 delims=()" %%b in ("%file_name%") do set "number=%%b"

if defined number (
    set /a number+=1
    set "new_file_name=%basename%(%number%)%file_ext%"
) else (
    set "new_file_name=%file_name%%file_ext%"
)

rem Sprawdź, czy plik istnieje i dodaj numerację
:check_file
if exist "%backup_folder%\%new_file_name%" (
    set /a i+=1
    set "new_file_name=%basename%(!i!)%file_ext%"
    goto check_file
)

rem Utwórz nowy, pusty plik
type nul > "%backup_folder%\%new_file_name%"

rem Wklej zawartość schowka do nowego pliku za pomocą PowerShell
powershell -command "Get-Clipboard | Out-File -FilePath '%backup_folder%\%new_file_name%' -Encoding UTF8"

echo Kopia zapasowa została utworzona i zawartość schowka została wklejona pomyślnie.
pause

Ten skrypt:

  1. Uzyskuje nazwę pliku, który został kliknięty (source_file).

  2. Określa ścieżkę do folderu kopii zapasowych (bieżący katalog).

  3. Uzyskuje nazwę pliku bez ścieżki i rozszerzenia (file_name i file_ext).

  4. Sprawdza, czy nazwa pliku zawiera już numer w nawiasie i zwiększa go o 1.

  5. Funkcja check_file sprawdza istnienie pliku z numeracją w nazwie i automatycznie dodaje numerację, jeśli plik o tej samej nazwie już istnieje.

  6. Tworzy nowy, pusty plik.

  7. Używa PowerShell do wklejenia zawartości schowka do nowo utworzonego pliku.

  8. Wyświetla komunikat o pomyślnym utworzeniu kopii zapasowej i wklejeniu zawartości schowka.

to działa poprawnie

Ale to, tworzy plik o nazwie %1, zamiast o prawidłowej.

Skonfiguruj skrót do uruchamiania skryptu z zaznaczonym plikiem:

  • Kliknij prawym przyciskiem myszy na utworzony skrót i wybierz "Właściwości".

  • W polu "Element docelowy" dodaj %1 na końcu ścieżki do pliku .bat. Powinno to wyglądać tak:

  • "C:\ścieżka\do\pliku.bat" %1
    

 

Utwórz skrót klawiszowy (opcjonalnie):

  • W oknie "Właściwości" skrótu przejdź do zakładki "Skrót".

  • W polu "Klawisz skrótu" wpisz kombinację klawiszy, którą chcesz użyć, np. Ctrl+Shift+K.

  • Kliknij "OK" lub "Zastosuj".

Gdzie jest błąd?

komentarz 5 lutego przez TOWaD Mądrala (6,420 p.)
edycja 6 lutego przez TOWaD

Ponawiam pytanie, bo nie wiem gdzie szukać błędu

Edit: Z edytowany skrypt bo tamten nie działał, wróciłem do poprzedniego

@echo on
rem Uzyskaj nazwę pliku, który został kliknięty lub podświetlony
set "source_file=%~1"

rem Jeśli nie ma zaznaczonego pliku, poproś o nazwę pliku
if "%source_file%"=="" (
    set /p source_file=Podaj nazwę pliku: 
)

rem Uzyskaj nazwę pliku bez ścieżki i rozszerzenia
for %%I in ("%source_file%") do set "file_name=%%~nI"
for %%I in ("%source_file%") do set "file_ext=%%~xI"

rem Ścieżka do folderu kopii zapasowych (bieżący katalog)
set backup_folder=%cd%

rem Funkcja do sprawdzania istnienia pliku i dodawania numeracji
setlocal enabledelayedexpansion
set "new_file_name=%file_name%%file_ext%"
set "i=0"

rem Sprawdź, czy nazwa pliku zawiera już numer w nawiasie
for /f "tokens=1 delims=()" %%a in ("%file_name%") do set "basename=%%a"
for /f "tokens=2 delims=()" %%b in ("%file_name%") do set "number=%%b"

if defined number (
    set /a number+=1
    set "new_file_name=%basename%(%number%)%file_ext%"
) else (
    set "new_file_name=%file_name%%file_ext%"
)

rem Sprawdź, czy plik istnieje i dodaj numerację
:check_file
if exist "%backup_folder%\%new_file_name%" (
    set /a i+=1
    set "new_file_name=%basename%(!i!)%file_ext%"
    goto check_file
)

rem Utwórz nowy, pusty plik
type nul > "%backup_folder%\%new_file_name%"

rem Wklej zawartość schowka do nowego pliku za pomocą PowerShell
powershell -command "Get-Clipboard | Out-File -FilePath '%backup_folder%\%new_file_name%' -Encoding UTF8"

echo Kopia zapasowa została utworzona i zawartość schowka została wklejona pomyślnie.
timeout /t 2 /nobreak >nul
pause

żeby nie było argumentów w element docelowy to plik bat

@echo off
echo Argument: %1
if "%~1"=="" (
    set /p source_file=Podaj nazwę pliku: 
    echo Podana nazwa pliku: "%source_file%"
    if not "%source_file%"=="" (
        echo Uruchamianie skryptu z podaną nazwą pliku...
        "C:\1\script.bat" "%source_file%"
    ) else (
        echo Nie podano nazwy pliku.
    )
) else (
    echo Przekazany argument: %~1
    echo Uruchamianie skryptu z przekazanym argumentem...
    "C:\1\script.bat" "%~1"
)
pause

Skrót klawiszowy nie działał w żadnym przypadku.

A dwuklik zależności od ustawień dawało %1 (argument ścieżki) lub (1) <- (nazwa bez nazwy) czasami chyba nawet działał poprawnie.

ale teraz

Argument:
Podaj nazw─Ö pliku: rrrr.xyz
Podana nazwa pliku:
Nie podano nazwy pliku.
Press any key to continue . . .

Edit:: to działa, ale klawiszowy nadal nie.(Wina skrótu pewnie był zakazany)

 EDIT::
@echo off

if "%~1"=="" goto :no_argument
echo Przekazany argument: %~1
echo Uruchamianie skryptu z przekazanym argumentem...
"C:\sciezka\do\skryptu\script.bat" "%~1"
goto :end

:no_argument
set /p source_file=Podaj nazwę pliku:
if not "%source_file%"=="" (
    echo Podana nazwa pliku: "%source_file%"
    echo Uruchamianie skryptu z podaną nazwą pliku...
    "C:\sciezka\do\skryptu\script.bat" "%source_file%"
) else (
    echo Nie podano nazwy pliku.
)

:end
pause

Bez go to : ani rusz, ale skrót klawiszowy nadal nie działa skrót działa ale nie wyłapuje aktywnego katalogu i znaczonego pliku prawidłowo, no i wywala się na polskich znakach. No i w sumie ten drugi skrypt nic nie daje.

 

komentarz 5 lutego przez TOWaD Mądrala (6,420 p.)
A drugie pytanie, jak poprawić kodowanie by działało dla skryptu (np dla znaku @)
komentarz 6 lutego przez TOWaD Mądrala (6,420 p.)
No cóż następny miniprogram/script który nie robi czego chcę, jest bliski ideału ale niestety przy użyciu skrótu klawiszowego nie wykrywa mi podświetlonego plik i tworzy w lokalizacji pliku bez polskich znaków, a przeciągnięcie, nawet na skrót działa OK w ostatniej wersji.

Jak by ktoś miał ochotę i był obcykany w .bat to to chętnie poczytam. Na razie zostawiam temat.

1 odpowiedź

0 głosów
odpowiedź 3 lutego przez Velta Maniak (52,830 p.)

Nie Element docelowy, a Rozpocznij w. Po zmianie pola dla tej wartości działa:

komentarz 3 lutego przez TOWaD Mądrala (6,420 p.)

Dzięki za zainteresowane, ale zrobiłem

ścieżka do pliku

"C:\ścieżka\do\" %1

to zrobiło tak::

"C:\ścieżka\do\ %1"

i wyrzuciło błąd

Ale tak naprawdę to skrót klawiszowy będzie działał w jednym katalogu, a nie oto mi chodziło. No nic po prostu będę kopiował plik.bat do innych katalogów. Może dlatego że to windows 10 i stary cmd a nie terminal.

Podobne pytania

+3 głosów
9 odpowiedzi 1,116 wizyt
pytanie zadane 18 lutego 2016 w Systemy operacyjne, programy przez niezalogowany
0 głosów
3 odpowiedzi 1,495 wizyt
0 głosów
1 odpowiedź 341 wizyt

93,336 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...