Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Windows批处理文件以使用我正在压缩的文件重命名输出文件。_Batch File_Command Line - Fatal编程技术网

Batch file Windows批处理文件以使用我正在压缩的文件重命名输出文件。

Batch file Windows批处理文件以使用我正在压缩的文件重命名输出文件。,batch-file,command-line,Batch File,Command Line,我正在压缩一个文件并试图重命名我的输出文件,方法是读取原始文件并用原始文件名重命名输出文件。目前,我正在运行一个批处理文件,它将通过在归档目录中创建shell并将文件复制到其中来压缩文件。此外,我正在为事件创建日志文件。我正在使用7-Zip命令行版本进行压缩。 echo Start Compression 7za a -t7z "c:\Archive_Directory\%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z

我正在压缩一个文件并试图重命名我的输出文件,方法是读取原始文件并用原始文件名重命名输出文件。目前,我正在运行一个批处理文件,它将通过在归档目录中创建shell并将文件复制到其中来压缩文件。此外,我正在为事件创建日志文件。我正在使用7-Zip命令行版本进行压缩。

echo Start Compression

7za a -t7z "c:\Archive_Directory\%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "C:\File_To_Compress\*.xls" >"C:\Users\Compression_Logs\_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"

echo Finish Compression    

timeout /t 30
批处理文件创建/压缩必要的文件,并由于时间戳的原因为所有文件提供相同的名称。只希望我能弄明白所有文件都可以有原始文件名

我拥有的示例输出:
原始文件名-Source.xls
压缩文件-1030-05012017.7z
日志文件-1030-05012017。日志

我想要的:
压缩文件-源代码_1030-05012017.7z
日志文件-Source_1030-05012017.Log

echo Start Compression

for %%a in ("C:\File_To_Compress\*.xls") do set "name=%%~na"

7za a -t7z "c:\Archive_Directory\%name%_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "C:\File_To_Compress\*.xls" >"C:\Users\Compression_Logs\%name%_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"

echo Finish Compression    

timeout /t 30
依次将
%%a
设置为与掩码匹配的每个文件的名称,然后依次将每个文件的名称设置为
名称
%%~na
仅表示
名称部分

在所需的文件名中使用
name
作为字符串

注:将时间戳显示为YYYYMMDDHHMMSS更有用,它允许以逻辑方式按字母顺序排序

echo Start Compression

for %%a in ("C:\File_To_Compress\*.xls") do (

 7za a -t7z "c:\Archive_Directory\%%~na_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.7z"  "%%a" >"C:\Users\Compression_Logs\%%~na_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.log"
)

echo Finish Compression    

timeout /t 30

此版本将分别为每个源文件创建归档文件和日志文件

的帮助将提供一些有用的信息,特别是关于参数扩展的信息。请注意
%~
扩展,特别是
%~n
。如前所述,这将不起作用;它将只给出扩展中最后一个文件的名称。请参阅,了解如何在
for
命令中使用
对多个命令进行分组。@JeffZeitlin-我猜出于某种原因,这是一个深思熟虑的选择。@SomethingDark:似乎OP希望将所有目标文件压缩为一个文件-那么要指定什么名称?如果每个都要单独压缩,为什么xls文件一开始相对较小,因此似乎没有太多意义。@Magoo-我不反对对压缩Excel工作簿实用性的评估;然而,我可以将此视为通用“归档”过程的CMVE,并从该角度进行了评论。