如何将变量放入我的文件名?

时间:2017-01-13 23:23:04

标签: windows batch-file xcopy

我想要复制.bat文件。副本应与原始文件位于同一路径中,并具有随机数作为名称。到目前为止,这是我的方法:

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

第一个问题:我需要做什么,程序创建一个.bat文件,前面有一个数字? (因为现在它只创建一个.bat文件而没有任何东西在点前......)

第二个问题:如果目标是文件或目录,我该如何解决问题呢?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

除了line !~ /\d/ 行将名为SET nr = %RANDOM% SPACE 的变量设置为以 SPACE 开头的随机数之外,你实际上做了不需要临时变量nr,您可以立即使用nr

要避免RANDOM的文件/目录提示,请改用xcopy命令。请注意,这不支持copy切换。相反,您可以使用/Q来阻止> nul显示某些内容。

您不需要在源copy之前加*.bat,因为%CD%\只指向当前工作目录,但%CD%单独指向该目录。

最后,我假设*.bat你实际上是指@echo来抑制命令回声。

所以这是固定代码:

@echo off