2017-01-13 18 views
0

Я хочу скопировать файл .bat. Копия должна совпадать с исходным файлом и иметь случайное число в качестве имени. Это мой подход до сих пор:Как я могу поместить переменную в мое имя?

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

Первый вопрос: Что я должен сделать, что программа создает .bat файл с номером перед точкой? (потому что теперь он создает только файл .bat без чего-либо перед точкой ...)

Второй вопрос: как я могу остановить вопрос, если цель является файлом или каталогом?

+1

просто поставить * после назначения ... – ludmuterol

+0

прилагая дикие карты (? '*', '') Может работать в этой ситуации, но может быть немного опасно, поскольку исходное имя может быть скопировано частично; попробуйте следующее: 'xcopy" file.batch "" new.bat * "создает копию с именем' new.batch', а 'xcopy 'file.batch" "new.bat?" создает копию с именем 'new. batc' ... – aschipfl

ответ

0

Помимо того, что линии SET nr = %RANDOM% устанавливает переменную nrПРОСТРАНСТВА к случайному числу предшествует ПРОСТРАНСТВА, вы на самом деле не нужна промежуточная переменную nr, вы можете использовать RANDOM немедленно вместо этого.

Чтобы избежать запроса файла/каталога xcopy, вместо этого используйте команду copy. Обратите внимание, что это не поддерживает переключатель /Q. Вместо этого вы можете использовать > nul, чтобы предотвратить отображение copy.

Вам не нужно предварить по источникам *.bat с %CD%\ как %CD% просто указывает на текущий рабочий каталог, но *.bat одних точек в этот каталог в любом случае.

Наконец, я предполагаю, что на @echo вы фактически имеете в виду @echo off для подавления эхо-сигналов.

Так вот фиксированный код:

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

SET nr = %RANDOM% создает переменную с завершающими пробелами в имени: %nr % вместо %nr%и с ведущим пространством стоимости.

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

Вы можете использовать

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

но обратите внимание, что оба %nr%, а также %random% не меняется. Следующий фрагмент кода будет лучше

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

Однако 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.)

Читать RANDOM article а.