Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

batch shift cmd

Frage Entwicklung Batch & Shell

Mitglied: QuakeMarine1

QuakeMarine1 (Level 1) - Jetzt verbinden

13.06.2008, aktualisiert 24.06.2008, 6550 Aufrufe, 17 Kommentare

%* problem

hiho

schnell erklärtes problem

c:\batch.bat alpha beta gamma delta

batch.bat
@echo off
cls
echo %*

es soll "alpha" übersprungen werden
ergo shiften wir

@echo off
cls
shift /1
echo %1 %2 %3

kann ich nun %1 %2 %3 zusammenfassen - %* geht dann nicht ?
oder
wie kann ich %10 %11 ... angeben?

thx
andre
Mitglied: 60730
13.06.2008 um 17:08 Uhr
moin,

das, was ich aus deinem schnell erklärten Problem herausgelesen habe ist

01.
echo %1 %2 %3  
02.
set alle = %1 %2 %3 
03.
set alle
... aber das meintest du nicht - oder doch???
Bitte warten ..
Mitglied: bastla
13.06.2008 um 17:15 Uhr
Hallo QuakeMarine1!

Könnte so gehen:
01.
@echo off 
02.
cls 
03.
echo Ab Parameter 2: 
04.
for /f "tokens=1*" %%i in ("%*") do echo %%j 
05.
echo\ 
06.
echo Parameter 10: 
07.
for /f "tokens=10" %%i in ("%*") do echo %%i
Grüße
bastla
Bitte warten ..
Mitglied: Biber
13.06.2008 um 17:54 Uhr
Moin quakeMarine1,

und ohne FOR-Anweisung so:
01.
::------snipp Shifttest.cmd 
02.
@echo off & setlocal 
03.
Set /a cnt=1 
04.
:top 
05.
if [%~1] neq [] ( @echo Parm_%cnt%: [%1] ) ELSE goto :eof 
06.
shift /1 
07.
Set /a cnt+=1 
08.
goto :top 
09.
::------snapp Shifttest.cmd
Demo:
01.
>>Shifttest.cmd  a b c d e ff gg hh ii jj kk ll mm nn oo pp qq rr 
02.
Parm_1: [a] 
03.
Parm_2: [b] 
04.
Parm_3: [c] 
05.
Parm_4: [d] 
06.
Parm_5: [e] 
07.
Parm_6: [ff] 
08.
Parm_7: [gg] 
09.
Parm_8: [hh] 
10.
Parm_9: [ii] 
11.
Parm_10: [jj] 
12.
Parm_11: [kk] 
13.
Parm_12: [ll] 
14.
Parm_13: [mm] 
15.
Parm_14: [nn] 
16.
Parm_15: [oo] 
17.
Parm_16: [pp] 
18.
Parm_17: [qq] 
19.
Parm_18: [rr]
... wobei nun die ganze Visualisierung nur zeigen soll, dass Du auch mit mehr als 10 Parametern im Batch umgehen kannst.

Der (theoretische) Nachteil von bastlas eleganterer Lösung ist, dass die FOR /F-Anweisung selbst nur mit Token1 bis ca. Token31 arbeiten kann.
Für "beliebig viele" Aufrufparameter musst Du wirklich mit SHIFT rumkaspern.

wobei es ausser den paar Mitlesern gar nicht mehr viele wissen, dass es so ein Kommando gibt.

Grüße
Biber
Bitte warten ..
Mitglied: QuakeMarine1
13.06.2008 um 18:17 Uhr
oh gott
will doch nur ein parameter kürzen - was für horror scripte


könnte man die parameter als block angeben? so in der art

batch.bat alpha "beta gamma delta"

und nach dem shiften
echo %1 ohne "" ausgeben ?
Bitte warten ..
Mitglied: 60730
13.06.2008 um 18:46 Uhr
Hi,

das dumme ist doch, gibst du die Parameter in "" an, ist es nur noch einer ;-(

Was genau mußt du denn machen?
"So" Horror finde ich die beiden Ansätze nun nicht wirklich.
Bitte warten ..
Mitglied: QuakeMarine1
13.06.2008 um 19:01 Uhr
was genau ich machen will - oje ....

appl. A gibt befehle an batch B weiter
appl.A hat eigene variablen die mit $(irgendwas) definiert sind

A übergibt an B
$(Scene.Path.Dequote) -nogui -render -$(Scene.Enquote) -frame ($subrange.start) $(subrange.end) [$(sequenceby)] -threads $(cpus) $(extra)


batch B
xcopy ....bla bla
for /L %%X in (0,1,10) do for /f "tokens=2" %%i in ('findstr /b "units" "%1\info.txt"') do if "%%i"=="%%X" (copy /y "C:\cinema\c4d9.6 FR32\prefs\%%X.p" "C:\cinema\c4d9.6 FR32\prefs\CINEMA 4D.prf" && echo units set to %%X) else echo units set to
"C:\cinema\c4d9.6 FR32\CINEMA 4D.exe" %*

am ende bei %* darf nicht $(Scene.Path.Dequote) übergeben werden
daher wollte ich die per shift übergehen

rafft das einer ausser mir ?
Bitte warten ..
Mitglied: Biber
13.06.2008 um 19:07 Uhr
Moin Quakemarine1,

dann reduziere meine Variante oben auf diese Mimik:
01.
::------snipp NochnShifttest.cmd 
02.
@echo off & setlocal 
03.
Set /a cnt=1 
04.
:top 
05.
if "%~1" neq "" ( @echo Parm_%cnt%: [%~1] ) ELSE goto :eof 
06.
shift /1 
07.
Set /a cnt+=1 
08.
goto :top 
09.
::------snapp NochnShifttest.cmd
...ergibt.
01.
>NochnShifttest.cmd alpha "beta gamma delta eta" 
02.
Parm_1: [alpha] 
03.
Parm_2: [beta gamma delta eta]
Passt?

Grüße
Biber
P.S. Wenn Du meinst, das wären Horror-Skripte....
... dann besuch mich mal zu Hause...
Bitte warten ..
Mitglied: QuakeMarine1
13.06.2008 um 19:22 Uhr
so weit so gut und wie weiter ?
batch scripen war nie meine stärke
Bitte warten ..
Mitglied: bastla
13.06.2008 um 19:41 Uhr
@Biber

... obwohl: Bei Verwendung von Anführungszeichen für die Parameter 2 bis x könnte die "NochnShifttest.cmd" eigentlich auch so aussehen:
01.
@echo off & setlocal 
02.
echo Parm_1: [%~1] 
03.
echo Parm_2: [%~2]
@QuakeMarine1
Kannst Du denn Anwendung A dazu überreden, alles nach dem ersten Parameter in Anführungszeichen einzuschließen?

Grüße
bastla
Bitte warten ..
Mitglied: QuakeMarine1
22.06.2008 um 17:54 Uhr
hallo
ich muss die sache noch mal aufwärmen

es ist mir nicht vergönnt das problem zu lösen sobald ein leerzeichen im ersten parameter steckt und ein " erzwingt

mal vereinfacht dargestellt
was appA an batch übergibt ist

"$(Scene.path.dequote)\info.txt" -nogui -render ...
was übersetzt ist
"Z:\test test\info.txt" -nogui -render ...

das batch

for /f "tokens=2" %%i in ('findstr /b "units" %1') do if "%%i"=="%%X" (copy ...)

das lubbt 1a
dann aber

for /f "tokens=1*" %%i in ("%*") do "C:\pfad zur.exe" %%j

gibt mir übersetzt aus

"C:\pfad zur.exe" test\info.txt" -nogui -render ...
soll aber sein
"C:\pfad zur.exe" -nogui -render ...

ok ich könnte leerzeichen im parameter vermeiden nur bin ich nicht sicher das sich das immer vermeiden lässt

schwere geburt...

A.
Bitte warten ..
Mitglied: Biber
22.06.2008 um 18:06 Uhr
Moin QuakeMarine1,

Wenn doch aber, wie Du schreibst...
for /f "tokens=1*" %%i in ("%*") do "C:\pfad zur.exe" %%j

gibt mir übersetzt aus

"C:\pfad zur.exe" test\info.txt" -nogui -render ...
soll aber sein
"C:\pfad zur.exe" -nogui -render ...
...Reicht es dann nicht, das "tokens=1*" in ein "Token=2*" zu ändern?

Fakt ist jedenfalls, dass im Batch durch die SHIFT-Anweisung aus Parameter %2 der Parameter %1, aus %3 der Parameter %2 wird etc, aber der Parameter %* immer gleich %* bleibt. Das ist halt so implementiert. Wenn wir an der Stelle keinen Workaround finden, dann mussen wir eben die Strategie ändern.

Grüße
Biber
Bitte warten ..
Mitglied: QuakeMarine1
22.06.2008 um 19:08 Uhr
tokens=2 nur wenn leerzeichen in dem parameter ist sonst tokens=1
Bitte warten ..
Mitglied: bastla
22.06.2008 um 20:42 Uhr
Hallo QuakeMarine1!

Wenn in den Parametern kein "!" vorkommt, vielleicht so:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Alle=%*" 
03.
echo "C:\pfad zur.exe" !Alle:%1=!
Grüße
bastla
Bitte warten ..
Mitglied: QuakeMarine1
22.06.2008 um 20:54 Uhr
ich habe gerade die Appl. nicht zu hand weil anderer PC
so etwa?

@echo off & setlocal enabledelayedexpansion
for /f "tokens=2" %%i in ('findstr /b "units" %1') do if "%%i"=="%%X" (copy ...)
shift /1
set "Rest=%*"
"C:\pfad zur.exe" !Rest:%1=!

wobei der set nicht gehen sollte - eher irgendwie so

for /f "tokens=2" %%i in ('findstr /b "units" %1') do if "%%i"=="%%X" (copy ...)
for /f "tokens=1*" %%i in ("%*") do set "Rest=%*"
"C:\pfad zur.exe" !Rest:%1=!


oder net ??
Bitte warten ..
Mitglied: bastla
22.06.2008 um 21:22 Uhr
Hallo QuakeMarine1!

Wie schon oben festgestellt, bringt "shift" nichts, wenn Du nachher ohnehin wieder "%*" verwendest, daher also:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "tokens=2" %%i in ('findstr /b "units" %1') do if "%%i"=="%%X" (copy ...) 
03.
set "Rest=%*" 
04.
"C:\pfad zur.exe" !Rest:%1=!
Mit der Schreibweise
01.
!Rest:%1=!
gibst Du die Anweisung, im aus allen Parametern bestehenden String %Rest% den Teil %1 (also den ersten Parameter) durch "Nichts" (steht zwischen "=" und "!" ) zu ersetzen, also diesen Teil weg zu lassen.

"DelayedExpansion" (mit dem Variablenbegrenzungszeichen "!") benötigst Du, da der zu ersetzende erste Parameter ebenfalls eine Variable ist (und daher "%" im Namen hat).

Grüße
bastla
Bitte warten ..
Mitglied: QuakeMarine1
24.06.2008 um 17:43 Uhr
das ist ja genials - wenn wir jetzt noch europameister werden ...



letztlich die frage wie parameter 1 und 2 skippen kann (für den fall der fälle)


dickes danke
Bitte warten ..
Mitglied: bastla
24.06.2008 um 17:53 Uhr
Hallo QuakeMarine1!

... wie parameter 1 und 2 skippen ...
Selbes Prinzip:
01.
set "Rest=%*" 
02.
set "Rest=!Rest:%1=!" 
03.
set "Rest=!Rest:%2=!" 
04.
...
Dabei bleiben zwar die Trennzeichen (Leerzeichen) nach %1 und %2 noch am Anfang von %Rest%, aber bei Bedarf kannst Du diese auch noch mit-ersetzen:
01.
set "Rest=!Rest:%1 =!"
Wenn Du ganz sicher bist, dass es zwischen %1 und %2 nur ein einziges Leerzeichen gibt, sollte auch
01.
set "ParamsAb3=!Rest:%1 %2 =!"
klappen.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Windows Tools
Suche Batch Scheduler (.bat .cmd .exe) (8)

Frage von hf1965 zum Thema Windows Tools ...

Windows Installation
CMD-Batch Programmstart Befehle (1)

Frage von timsen96 zum Thema Windows Installation ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...