[bat] Documenten-map met spatie naar string

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Voor een batch uninstall-script moet ik het Documenten-mappad naar een string schrijven. Er zijn veel voorbeelden op het internet te vinden maar daarbij bevat die Documenten-mapnaam geen spatie(s). Bij een spatie in het Documenten-mappad wordt de string afgebroken. Wat ik al heb:

code:
1
2
FOR /F "tokens=3*" %%C IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') DO (SET docsfolder=%%C)
echo %docsfolder%


Mijn Documenten-mappad zoals opgeslagen in bovenstaande registersleutel:
C:\Users\Admin\OneDrive\Assetto Corsa

Resultaat van docsfolder-string:
C:\Users\Admin\OneDrive\Assetto
De inhoud van de string wordt dus bij een spatie afgebroken.

Hoe kan ik het volledige pad in de string opslaan, dus incl. evt. spaties? Dit script gaat over de hele wereld gebruikt worden dus het map-pad hardcoden in het script is geen optie.

[ Voor 4% gewijzigd door jfeelders op 10-04-2021 20:57 ]

Beste antwoord (via jfeelders op 12-04-2021 13:42)


  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 10:59
jfeelders schreef op zaterdag 10 april 2021 @ 21:19:
Nope, dat had ik al geprobeerd. De REG QUERY-functie pakt de waarde kennelijk maar tot aan een spatie.
Nee, de REG QUERY gaat wel goed, voer 'm maar eens los uit. Het gaat mis bij het opsplitsen met de FOR loop, je gebruikt tokens=3*, maar dit doet niet wat jij denkt dat het doet. Het derde gedeelte komt netjes in %%C tot 'ie weer een spatie ziet en deze komt dan in %%D enz. Wat wel zou werken is:

code:
1
2
FOR /F "tokens=2*" %%C IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') DO (SET docsfolder=%%D)
echo %docsfolder%

[ Voor 48% gewijzigd door Nielson op 10-04-2021 22:15 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 09:23
Is dat niet een kwestie van:
code:
1
SET docsfolder="%%C"

Was advocaat maar vindt het juridische nog steeds leuk


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Nope, dat had ik al geprobeerd. De REG QUERY-functie pakt de waarde kennelijk maar tot aan een spatie.

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 10:59
jfeelders schreef op zaterdag 10 april 2021 @ 21:19:
Nope, dat had ik al geprobeerd. De REG QUERY-functie pakt de waarde kennelijk maar tot aan een spatie.
Nee, de REG QUERY gaat wel goed, voer 'm maar eens los uit. Het gaat mis bij het opsplitsen met de FOR loop, je gebruikt tokens=3*, maar dit doet niet wat jij denkt dat het doet. Het derde gedeelte komt netjes in %%C tot 'ie weer een spatie ziet en deze komt dan in %%D enz. Wat wel zou werken is:

code:
1
2
FOR /F "tokens=2*" %%C IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') DO (SET docsfolder=%%D)
echo %docsfolder%

[ Voor 48% gewijzigd door Nielson op 10-04-2021 22:15 ]


Acties:
  • +1 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Omdat ik van te voren niet weet of een Documents-map bij iemand ergens een spatie bevat (bij mij toevallig wel) moet die %%C er wel in blijven. Uiteindelijk ben ik hier op uit gekomen wat lijkt te werken:

code:
1
2
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal`) DO (SET docsfolder=%%C)
echo %docsfolder%

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Is er een specifieke reden waarom je nog .bat gebruikt, en dit niet "gewoon" in Powershell doet?

code:
1
Get-ItemPropertyValue Registry::"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -name Personal

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Dit is een onderdeel van een batch fileremovalscript dat op oude en nieuwe Windows-pc's over de hele wereld moet kunnen werken met 1 klik op de knop.

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

jfeelders schreef op zondag 11 april 2021 @ 14:00:
Dit is een onderdeel van een batch fileremovalscript dat op oude en nieuwe Windows-pc's over de hele wereld moet kunnen werken met 1 klik op de knop.
Je beschrijft wat je wilt doen, maar geeft nog niet aan waarom je dit nu in een batchfile doet. een powershell script zou dit ook kunnen doen. Daarnaast is powershell flexibeler en wat minder complex omdat heel veel zaken native ingebouwd zijn. :)

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Ik heb onvoldoende kennis of de andere DEL en RD acties met relatieve bestandpaden ook worden ondersteund in Powershell waarbij die ook op veel verschillende Windows 7-10 computers moeten werken. Dus als je op een bestand klikt die dat meteen uitvoert.

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

jfeelders schreef op zondag 11 april 2021 @ 16:31:
Dus als je op een bestand klikt die dat meteen uitvoert.
Dat doet PowerShell om veiligheidsredenen sowieso niet. Een PowerShell file wordt standaard alleen geopend in Notepad en niet zomaar uitgevoerd.

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

jfeelders schreef op zondag 11 april 2021 @ 16:31:
Dus als je op een bestand klikt die dat meteen uitvoert.
Is het dan de bedoeling dat de gebruiker zelf het script moet starten?

Software onderhoud doe je bij voorkeur toch via policy's of evt. loginscripts? (hetzij via AD, SCCM, Intune, etc).

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
We hebben het hier niet over een bedrijfsomgeving maar privé. Het script zit bij een specifieke software/mod voor weersimulatie voor het spel Assetto Corsa om de mod tussen upgrades of bij niet meer nodig te verwijderen.

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ah, helder.... Omdat je wereldwijd aangaf was ik standaard uitgegaan van een grote onderneming. My bad. :)

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • Will_M
  • Registratie: Maart 2004
  • Niet online

Will_M

Intentionally Left Blank

wat doet je script als je 'Assett~1' een gebruikt (8.3 notatie).

Boldly going forward, 'cause we can't find reverse


Acties:
  • 0 Henk 'm!

  • M2M
  • Registratie: Juli 2006
  • Laatst online: 03:57

M2M

medicijnman

-_-


Acties:
  • 0 Henk 'm!

  • jfeelders
  • Registratie: Januari 2001
  • Laatst online: 06:44

jfeelders

Kwaliteit voor kwantiteit...

Topicstarter
Ja, dat is inderdaad de oplossing maar de FOR moet die spaties wel meenemen. De 8.3 oplossing daarboven kan niet omdat ik geen enkele invloed heb over de naam van een Mijn Documenten-omgeving van anderen. Daarom de oplossing zoals ik die hierboven werkend heb: jfeelders in "[bat] Documenten-map met spatie naar string"

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik zou dan nog eerder een custom delimeter opgeven ipv de standaard spatie/tab. Bijvoorbeeld een dubbele punt. Een dubbele punt is niet toegestaan in een foldernaam en kan dus niet voorkomen. Je realiseert hiermee dat je altijd de volledige inhoud van de registry value terugkrijgt. Ongeacht hoeveel spaties er in het pad staat.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Will_M schreef op maandag 12 april 2021 @ 11:16:
wat doet je script als je 'Assett~1' een gebruikt (8.3 notatie).
Daar zou ik niet teveel op vertrouwen. Je kunt 8.3 notatie namelijk uitzetten in de NTFS instellingen (via de registry of een group policy), en daar win je dan een fractie aan performance mee, en ik denk zelfs dat het standaard uit staat in de nieuwste Windows versies.
Question Mark schreef op maandag 12 april 2021 @ 13:20:
Ik zou dan nog eerder een custom delimeter opgeven ipv de standaard spatie/tab. Bijvoorbeeld een dubbele punt. Een dubbele punt is niet toegestaan in een foldernaam en kan dus niet voorkomen. Je realiseert hiermee dat je altijd de volledige inhoud van de registry value terugkrijgt. Ongeacht hoeveel spaties er in het pad staat.
Een dubbele punt niet toegestaan? Die komt nu juist in ieder pad voor. Kijk maar:

code:
1
C:\Users\Admin\OneDrive\Assetto Corsa

Ik zie echt een dubbele punt.

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 10:10

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

downtime schreef op maandag 12 april 2021 @ 14:56:
[...]
Ik zie echt een dubbele punt.
En goedemorgen Mark... Je hebt helemaal gelijk. Dubbele punt is niet toegestaan in een foldernaam, maar komt natuurlijk wel voor in het complete pad.... |:(

Idee blijft uiteraard wel hetzelfde, kies een delimeter die niet voor kan komen in het complete pad, en je bereikt hetzelfde.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B

Pagina: 1