2017-01-13 13 views
0

Ich möchte eine .bat Datei kopieren. Die Kopie sollte sich im selben Pfad wie die Originaldatei befinden und eine Zufallszahl als Name haben. Das ist mein Ansatz so weit:Wie kann ich eine Variable in meinen Dateinamen einfügen?

@echo 
pause 
SET nr = %RANDOM% 
xcopy "%cd%\*.bat" "%nr%.bat" /q /y 
pause 

Erste Frage: Was muß ich tun, dass das Programm mit einer Reihe vor dem Punkt eine .bat Datei erstellt? (weil es jetzt nur eine .bat Datei ohne etwas vor dem Punkt erstellt ...)

Zweite Frage: Wie kann ich die Frage stoppen, wenn das Ziel eine Datei oder ein Verzeichnis ist?

+1

legen sich lediglich ein * nach dem Ziel ... – ludmuterol

+0

eine Wild-Card-Anfügen (? '*' '') Kann in dieser Situation arbeiten, aber kann sein ein bisschen gefährlich, da der Quellenname teilweise kopiert werden könnte; versuchen Sie folgendes: 'xcopy" file.batch "" new.bat * "' erstellt eine Kopie mit dem Namen 'new.batch', und' xcopy "file.batch" "new.bat?" 'erstellt eine Kopie namens' new. Batc' ... – aschipfl

Antwort

0

Neben der Tatsache, dass die Linie SET nr = %RANDOM% eine Variable nrSPACE auf eine Zufallszahl voraus durch eine SPACE, die Sie tatsächlich brauchen nicht die Zwischenvariable nr, können Sie RANDOM sofort stattdessen genannt Sätze verwenden.

Um die Datei/Verzeichnis-Eingabeaufforderung xcopy zu vermeiden, verwenden Sie stattdessen den Befehl copy. Beachten Sie, dass dies keinen /Q Switch unterstützt. Stattdessen könnten Sie > nul verwenden, um zu verhindern, dass copy etwas anzeigt.

Sie brauchen nicht die Quelle *.bat mit %CD%\ vorangehen, wie %CD% verweist nur auf das aktuelle Arbeitsverzeichnis, aber *.bat allein Punkte in dieses Verzeichnis sowieso.

Schließlich nehme ich an @echo Sie eigentlich @echo off, Befehlsechos zu unterdrücken.

So, hier ist der feste Code:

@echo off 
pause 
copy /Y "*.bat" "%RANDOM%.bat" > nul 
pause 
0

SET nr = %RANDOM% schafft Variable mit einem nachgestellten Leerzeichen in Namen: %nr % statt %nr%und mit einem führenden Platz im Wert.

SET nr = %RANDOM% 
rem ↑ ↑   remove spaces 
rem     use following syntax instead 
SET "nr=%RANDOM%" 

könnten Sie

xcopy "%cd%\*.bat" "%random%.bat" /q /y 

bemerken verwenden, sondern dass beide %nr% sowie %random% nicht ändert. Folgender Codeausschnitt würde

for /F "delims=" %%G in ('dir /b *.bat') do (
    SETLOCAL EnableDelayedExpansion 
    xcopy "%%~G" "!random!.bat" /q /y 
    ENDLOCAL 
) 

jedoch besser sein, the %RANDOM% pseudovariable generates the same "random" number until the clock ticks over another second. (Notice also that the "random" numbers don't look all that random.)

die RANDOM article auch lesen.

Verwandte Themen