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

How can I put a variable into my filename?

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

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

第一个问题:程序创建一个 .bat 文件并在点前加上一个数字,我该怎么做? (因为现在它只创建一个 .bat 文件,点前面没有任何内容...)

第二个问题:如果目标是文件或目录,如何停止问题?

SET nr = %RANDOM% 创建名称中尾随 space 的变量:%nr % 而不是 %nr% and 前导 space 中的值。

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

除了 SET nr = %RANDOM% 行将一个名为 nrSPACE 的变量设置为一个随机数,前面加上 SPACE,其实不需要中间变量nr,直接用RANDOM就可以了。

要避免 xcopy 的 file/directory 提示,请改用 copy 命令。请注意,这不支持 /Q 开关。相反,您可以使用 > nul 来防止 copy 显示某些内容。

您不需要在源代码 *.bat 之前加上 %CD%\,因为 %CD% 仅指向当前工作目录,而 *.bat 单独指向该目录无论如何。

最后,我假设 @echo 你实际上是指 @echo off 抑制命令回显。

固定代码如下:

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