Prüfen ob Datei auf mehreren PCs existiert
Hallo Zusammen,
ich hoffe Ihr habt gestern gut überstanden
Aktuell möchte mir eine Batch schreiben, die überprüft, ob auf mehreren PCs eine Datei existiert.
Das habe ich bisher genutzt, funktioniert auch wunderbar
Jetzt möchte ich aber nicht jedes Mal die IP Adresse angeben, sondern die Batch soll als Quelle eine txt. Datei benutzen, in der mehrere IPs stehen und die dann automatisch durchgehen.
Nett wäre noch, wenn er mir sagen könnte, unter welcher IP die Datei nicht gefunden werden konnte.
Wäre schön wenn mir jemand behilflich sein könnte.
Update:
Ich habe jetzt mal folgendes probiert.
Die Batch sagt aber, Pfad nicht vorhanden.
ich hoffe Ihr habt gestern gut überstanden
Aktuell möchte mir eine Batch schreiben, die überprüft, ob auf mehreren PCs eine Datei existiert.
Das habe ich bisher genutzt, funktioniert auch wunderbar
@echo off
echo.
set /p ID=Gebe die IP Adresse ein:
echo.
if exist "\\%ID%\C$\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUP\datei.txt" goto :ist vorhanden
echo.
:nicht vorhanden
echo Datei nicht gefunden
pause
goto :fertig
:ist vorhanden
echo Datei gefunden
pause
goto :fertig
:fertig
ende
Jetzt möchte ich aber nicht jedes Mal die IP Adresse angeben, sondern die Batch soll als Quelle eine txt. Datei benutzen, in der mehrere IPs stehen und die dann automatisch durchgehen.
Nett wäre noch, wenn er mir sagen könnte, unter welcher IP die Datei nicht gefunden werden konnte.
Wäre schön wenn mir jemand behilflich sein könnte.
Update:
Ich habe jetzt mal folgendes probiert.
@echo off
for %%a in ("C:\Downloads\ip.txt") do (
if exist "%%a" "\C$\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUP\datei.txt" goto :ist vorhanden
:nicht vorhanden
echo Datei nicht gefunden
pause
goto :fertig
:ist vorhanden
echo Skript gefunden
pause
goto :fertig
:fertig
ende
)
Die Batch sagt aber, Pfad nicht vorhanden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 511144
Url: https://administrator.de/contentid/511144
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
11 Kommentare
Neuester Kommentar
sondern die Batch soll als Quelle eine txt. Datei benutzen, in der mehrere IPs stehen und die dann automatisch durchgehen.
for /?
eintippen oder das hier lesenTutorial zur FOR-Schleife
Zitat von @chkdsk:
Moin,
bin ich tatsächlich schon durchgegangen, trotzdem vielen Dank dafür Daher ja auch mein Update in der eigentlichen Frage. Er scheint aber die zu verwendende Datei nicht finden zu wollen, da "Das System kann den angegebenen Pfad nicht finden."
Moin,
bin ich tatsächlich schon durchgegangen, trotzdem vielen Dank dafür Daher ja auch mein Update in der eigentlichen Frage. Er scheint aber die zu verwendende Datei nicht finden zu wollen, da "Das System kann den angegebenen Pfad nicht finden."
1. Kennen wir den Inhalt deiner Datei nicht - Glaskugel
2. Ist das Leerzeichen gewollt? Sind die " gewollt?
if exist "%%a" "\C$\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUP\datei.txt" goto :ist vorhanden
Wieso verteilst du dein Script nicht zuerst per GPO auf deine Clients (https://www.windowspro.de/wolfgang-sommergut/dateien-ordner-kopieren-ueb ..). Im Script legst du zusätzlich fest, dass es in einen bestimmten Ordner auf einen Share schreibt der für alle Clients zugänglich ist.
Nun noch einen zweite GPO einrichten die festlegt wann das Script laufen soll (Scheduled Task: https://social.technet.microsoft.com/Forums/en-US/bf79404a-08da-4e4d-af1 ..) .
Voila! Du hast dein Reporting
Übrigends: Anstatt hard-coded deine Pfade anzugeben solltest du mit SystemVariablen arbeiten: https://www.google.com/amp/s/www.winhelponline.com/blog/windows-10-shell ...
Nun noch einen zweite GPO einrichten die festlegt wann das Script laufen soll (Scheduled Task: https://social.technet.microsoft.com/Forums/en-US/bf79404a-08da-4e4d-af1 ..) .
Voila! Du hast dein Reporting
Übrigends: Anstatt hard-coded deine Pfade anzugeben solltest du mit SystemVariablen arbeiten: https://www.google.com/amp/s/www.winhelponline.com/blog/windows-10-shell ...
Zitat von @chkdsk:
Ich habe es jetzt wie folgt gelöst.
Ich habe es jetzt wie folgt gelöst.
> @echo off
> setlocal EnableDelayedexpansion
> for /F %%a in (PfadZurDatei\datei.txt) do (
> set "host=%%a"
> if exist "!host!\PfadDerÜberprüftWerdenSoll\datei2.txt" (
>
> rem file exists
> ECHO %%a>>"C:\install-success.txt"
> ) else (
> rem file does not exist
> ECHO %%a>>"C:\install-fail.txt"
> )
>
> )
> endlocal
>
So bekommst du halt nur einen temporären Report zur Laufzeit. Außerdem prüfst du vorher ob der Client existiert. Sowas dauert. Bei einigen 100 PCs oder mehr kann das Stunden dauern!!
warum das Script also nicht ein per GPO auf jeden Client verteilen? z.B. nach %Common AppData% (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders) So musst du dich nicht darum kümmern ob ein Client dazu kommt oder nicht. Das übernimmt deine GPO für dich.
UND: Ich verstehe nicht warum in Zeiten von Powershell immer noch BATCH verwendet wird. Wir leben im Jahr 2019 nicht 1989.
$shellFolders = Get-ItemProperty "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
$startUp = $shellFolders.'Common Startup'
$myFile1 = [System.IO.Directory]::GetFiles($startUp, "meineDatei1.txt", [System.IO.SearchOption]::TopDirectoryOnly)
$report = New-Object psobject
$report | Add-Member -MemberType NoteProperty -name hostname -Value $([Environment]::MachineName)
$report | Add-Member -MemberType NoteProperty -name time -Value (Get-Date -Format "dd/MM/yyyy hh:mm:ss").ToString()
if (![string]::IsNullOrEmpty($myFile1))
{
$report | Add-Member -MemberType NoteProperty -name myFile1_exists -Value "YES"
}
else
{
$report | Add-Member -MemberType NoteProperty -name myFile1_exists -Value "NO"
}
$report | Export-Csv "<mein UNC PFAD>\Report.csv" -NoTypeInformation -Append
Danach noch eine GPO um das Script zu triggern: https://4sysops.com/archives/run-powershell-scripts-as-immediate-schedul ...
Somit hast du ein Set and forget