【问题标题】:Batch File Adding Space to Variable批处理文件向变量添加空间
【发布时间】:2017-01-31 03:19:08
【问题描述】:
@ECHO OFF 
CLS

REM Start Backup
TITLE Backup

SETlocal EnableDelayedExpansion

REM Capture the date/time(right down to the second) and then assign it to a variable
SET yy=%date:~-4%
SET dd=%date:~-7,2%
SET mm=%date:~-10,2%
SET newdate=%dd%%mm%%yy%_%Time:~0,8%
SET newdate=%newdate::=%
SET foldername=svetlana_backup_%newdate%

REM Variables
SET drive=R:
SET sevenZip=%USERPROFILE%\7z.exe

SET destination=R:\Backup

ECHO Running Backup Batch File

ECHO Please Plug in %drive%
PAUSE

ECHO %foldername%

MKDIR %destination%\%foldername%

FOR /F "tokens=1,2 delims=," %%i IN (backuplist.txt) DO (

    SET completeSource=%%i
    SET completeDestination=%destination%\%foldername%\%%j

    ECHO Source: "!completeSource:"=!"
    ECHO Destination:"!completeDestination:"=!"

    MKDIR "!completeDestination:"=!"
    XCOPY "!completeSource:"=!" "!completeDestination:"=!" /E /F
)

REM Zip the folder using the 7z command line utility
%sevenZip% a -tzip %destination%\%foldername%.zip %destination%\%foldername%

REM Remove the unzipped backup folder
RMDIR /Q /S %destination%\%foldername%

PAUSE
EXIT

这是我过去几天一直在使用的备份批处理文件。直到今天早上它都运行良好。出于某种原因,当它创建变量foldername 时,它在字符串中包含一个以前没有的空格。结果是这样的:

svetlana_backup_22092016_ 93829

由于某种原因,破折号和 93829 之间的空间直到今天才出现。我将如何删除它并防止它再次发生?

【问题讨论】:

    标签: batch-file command-line cmd window


    【解决方案1】:

    您可以像这样解析文件/文件夹名
    set foldername=%foldername: =%

    这会将所有空格替换为空字符串

    问题可能是因为测试是在小时仅包含一位数字时运行的。 %Time:~0,8% 将输出包含额外空格的时间,因为时间将像这样存储:9:38:29 是 7 个字符,您读取最后 8 个字符。

    【讨论】:

    • 那行得通(给我 9 分钟,所以告诉我在接受答案之前等待),但为什么突然出现这个问题?直到今天才发生。
    • 已编辑答案:)
    • 用零替换空格而不是删除可能是更好的解决方案(所有文件格式相同,因此易于排序)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2010-10-23
    • 2018-01-14
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多