Batch Pfad mit Leerzeichen im Skript

H1ghSyst3m

Cadet 1st Year
Registriert
Juni 2019
Beiträge
11
Hey leute, habe einen Batchskript womit ich meine Lesezeichen mit einer Datei updaten möchte.
Aber das Problem ist das es den Pfad einfach nicht findet und es tritt
die FM: Die Datei "C:\Users\H1ghSyst3m\AppData\Local\Google\Chrome\User" kann nicht gefunden werden.


habe bereits probiert den pfad ebenfalls mit "%localappdata%\Google\Chrome\User Data\Default\Bookmarks" zu machen aber dann ersetzt es den text von Bookmarks mit der UpdateBookmarks datei nicht und fügt einfach in Bookmarks den Pfad hinein


Code:
@echo off
set "wort="Start""
set "datei1=%localappdata%\Google\Chrome\User Data\Default\Bookmarks"
set "datei2=UpdateBookmarks"
set "tempDatei=temp.txt"

setlocal enabledelayedexpansion
set "flag=0"

for /f "delims=" %%a in (%datei1%) do (
  if "!flag!"=="1" (

  ) else (
    echo %%a>>!tempDatei!
  )
  if "%%a"=="%wort%" set "flag=1"
)

set "flag=0"

for /f "delims=" %%a in (%datei2%) do (
  if "!flag!"=="1" (
    echo %%a>>!tempDatei!
  )
  if "%%a"=="%wort%" set "flag=1"
)

move /y !tempDatei! %datei1%

echo Aenderungen wurden erfolgreich uebernommen.
echo Druecken Sie eine beliebige Taste, um das Skript zu beenden.
pause >nul
 
Die Datei "C:\Users\H1ghSyst3m\AppData\Local\Google\Chrome\"User Data"\Default\Bookmarks" kann nicht gefunden werden.

Hat leider nicht funktioniert
 
In meinen Scripts funktioniert das so :D
Aber für weitere Hilfe kenn ich mich eindeutig zu wenig aus. Bin raus, sorry.
 
Das Skript hat auch die Berechtigungen auf den Pfad zuzugreifen? Im Zweifel mal als Admin ausführen.
 
Danke trotzdem
Ergänzung ()

zeaK schrieb:
Das Skript hat auch die Berechtigungen auf den Pfad zuzugreifen? Im Zweifel mal als Admin ausführen.
Ja das Skript hat Berechtigung. Habe es gerade mit admin ebenfalls probiert. Das selbe Problem
 
Zuletzt bearbeitet:
So schnell mal per Tatschfone angesehen.

Das " am Anfang gehoert hinter das = @H1ghSk1ll3d

Also nicht so:

set "datei1=%localappdata%\Google\Chrome\User Data\Default\Bookmarks"

sondern so:

set datei1="%localappdata%\Google\Chrome\User Data\Default\Bookmarks"
 
Danke jetzt hat es den Pfad gefunden, aber aus irgendeinem Grund. Ersetzt es den Text von Bookmarks nicht mit dem Text von UpdateBookmarks.
Die Datei Bookmarks ist nun leer und darin steht nun: C:\Users\H1ghSyst3m\AppData\Local\Google\Chrome\User Data\Default\Bookmarks

Der Skript hatte auf dem desktop funktioniert. Eine Idee was ich da im Skript noch ändern muss?
Ergänzung ()

Die funktion vom skript ist. Das es nach einem bestimmten Wort in beiden Dateien sucht. Und den ganzen Text unter der Zeile wo das Wort ist mit dem Text von der anderen Datei ersetzt.

Sozusagen es updatet die Lesezeichendatei mit einer anderen Lesezeichendatei ohne den Ordner "Start" zu verändern
 
1. Anführungszeichen nicht inflationär verwenden. Viel hilft eben nicht immer viel, sondern kann sogar schaden. set kommt gänzlich ohne Anführungszeichen aus, auch wenn der Wert Leerzeichen enthält. Man sollte daher die "" um den Pfad bzw. die Variable auch erst dann setzen, wenn man diesen Pfad bzw. die Variable verwendet und nicht bereits im set.

Vorher: set "datei1=%localappdata%\Google\Chrome\User Data\Default\Bookmarks"
Nachher: set datei1=%localappdata%\Google\Chrome\User Data\Default\Bookmarks



2. for /f hat verschiedene Modi. In deinem Fall ist es zum Beispiel so:
filemode -> for /f "delims=" %%a in (*.*) do <-- durchlaufe die Dateien im fileset *.*
textmode -> for /f "delims=" %%a in ("hieristeintext") do <-- durchlaufe diesen Text

Wenn du nun statt "hieristeintext" "c:\bla\blubb\datei.txt" nimmst, durchläufst du den Pfad als Text, aber nicht die Datei. Andererseits kommen dir ohne "" natürlich die Leerzeichen im Pfad in die Quere.

Lösung: for /f "usebackq delims=" %%a in ("%datei1%") do

usebackq verändert das Verhalten so, dass der Textmode auf 'text' und der Filemode auf "file" reagiert, also single bzw. double quotes.

Siehe dazu: FOR /F



3. Leere if-Klammern. Batch is a bitch und da ist nicht nur bildlich gesprochen, sondern die nackte Wahrheit.
Batch mag leere if-Klammern gar nicht. Man sollte das if dann entweder mit not umdrehen oder den Testparameter ändern.

Code:
::SCHLECHT
if "!flag!"=="1"(
) else (
   echo irgendwas
)

:GUT
if "!flag!"=="0"(   ------ oder ------ if not "!flag!"=="1" (
   echo irgendwas
)



4. Die Referenzierung der Variablen mit !! ist nur innerhalb von Schleifen notwendig, wenn diese Variable innerhalb der Schleife verändert wird. Variablen, die von außerhalb der Schleife kommen, können weiterhin mit %% referenziert werden.


Da du leider keine Testdaten zur Verfügung gestellt hast, kann man das Skript nur bedingt beurteilen oder gar testen. Dementsprechend ist das Folgende mit Vorsicht zu genießen und ggfs anzupassen.

Alles in allem sähe das dann eher so aus:
Code:
@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET wort=Start
SET datei1=%localappdata%\Google\Chrome\User Data\Default\Bookmarks
SET datei2=UpdateBookmarks
SET tempDatei=temp.txt

SET flag=0

FOR /F "usebackq delims=" %%a IN ("%datei1%") DO (
  IF "!flag!"=="0" (
    ECHO %%a>>%tempDatei%
  )
  IF "%%a"=="%wort%" SET flag=1
)

SET flag=0

FOR /F "usebackq delims=" %%a IN ("%datei2%") DO (
  IF "!flag!"=="1" (
    ECHO %%a>>%tempDatei%
  )
  IF "%%a"=="%wort%" SET flag=1
)

move /y "%tempDatei%" "%datei1%"

ECHO Aenderungen wurden erfolgreich uebernommen.
ECHO Druecken Sie eine beliebige Taste, um das Skript zu beenden.
pause >nul

GOTO:EOF
 
Zuletzt bearbeitet:
Zurück
Oben