Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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
Powershell解压缩扩展名为.zip的文件并将其移动到另一个文件夹_Powershell_Batch File_Unzip - Fatal编程技术网

Powershell解压缩扩展名为.zip的文件并将其移动到另一个文件夹

Powershell解压缩扩展名为.zip的文件并将其移动到另一个文件夹,powershell,batch-file,unzip,Powershell,Batch File,Unzip,我希望你们中的一些人能帮助我。我被困在修改powershell脚本中 该脚本检查特定文件夹(源)中的zip文件(文件名为固定值)并将其移动到另一个文件夹(目标),但是我需要一个脚本来检查.zip扩展名,而不是固定值并将其移动到另一个文件夹。我现在正在使用这个脚本: powershell.exe -nologo -noprofile -command "& { $shell = New-Object -COM Shell.Application; $target = $shell.Name

我希望你们中的一些人能帮助我。我被困在修改powershell脚本中

该脚本检查特定文件夹(源)中的zip文件(文件名为固定值)并将其移动到另一个文件夹(目标),但是我需要一个脚本来检查.zip扩展名,而不是固定值并将其移动到另一个文件夹。我现在正在使用这个脚本:

powershell.exe -nologo -noprofile -command "& { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace('D:\Anlagen'); $zip = $shell.NameSpace('C:\Temp\Rechnungen\Outlook'); $target.CopyHere($zip.Items(), 16); }"

正如您所看到的,我需要将此脚本作为批处理.file。

使用
展开存档
将文件解压缩到目录,然后从批处理脚本将文件复制到其他地方。如果需要从批处理脚本执行此操作:

powershell.exe -c "Expand-Archive -Path 'C:\path\to\archive.zip' -DestinationPath 'C:\unzip\directory'"
xcopy /s /e /t "C:\unzip\directory" "C:\final\destination\directory"

请注意,UNC路径还应与任一命令一起使用,而不仅仅是本地路径。

使用
展开存档
将文件解压缩到目录,然后从批处理脚本将文件复制到其他地方。如果需要从批处理脚本执行此操作:

powershell.exe -c "Expand-Archive -Path 'C:\path\to\archive.zip' -DestinationPath 'C:\unzip\directory'"
xcopy /s /e /t "C:\unzip\directory" "C:\final\destination\directory"
请注意,UNC路径也应与任一命令一起使用,而不仅仅是本地路径。

如果您有7-Zip:

set 7zip="C:\Program Files\7-Zip\7z.exe"

IF EXIST "path\to\file.zip" (

    %7zip% x -o"path\to\new\folder" "path\to\file.zip"
)
下一行将通过子文件夹递归搜索任何zip文件。在下面的示例中,脚本将从C:的根开始递归搜索。文件的路径将保存为变量,以便以后调用

for /f "tokens=*" %%x in ('forfiles /p C:\ /m *.zip /s /c "cmd /c echo @path"') do if exist %%x (

    %7zip% x -o"path\to\new\folder" %%x
)
递归搜索多个驱动器号的另一种方法是将驱动器号设置为FOR循环中的变量。下面的示例将检查驱动器号是否存在,然后在整个目录中搜索zip文件。例如:

for %%i in (c:\, d:\, e:\, f:\, <enter as many as needed>) do if exist %%i (

    for /f "tokens=*" %%x in ('forfiles /p %%i /m *.zip /s /c "cmd /c echo @path"') do if exist %%x (

        %7zip% x -o"path\to\new\folder" %%x
    )
)
如果存在%%i(c:\,d:\,e:\,f:\,)中的%%i,请执行(
对于('forfiles/p%%i/m*.zip/s/c“cmd/c echo@path”')中的/f“tokens=*”%%x,如果存在,请执行%%x(
%7zip%x-o“路径\到\新\文件夹”%%x
)
)
如果您有7-Zip:

set 7zip="C:\Program Files\7-Zip\7z.exe"

IF EXIST "path\to\file.zip" (

    %7zip% x -o"path\to\new\folder" "path\to\file.zip"
)
下一行将通过子文件夹递归搜索任何zip文件。在下面的示例中,脚本将从C:的根开始递归搜索。文件的路径将保存为变量,以便以后调用

for /f "tokens=*" %%x in ('forfiles /p C:\ /m *.zip /s /c "cmd /c echo @path"') do if exist %%x (

    %7zip% x -o"path\to\new\folder" %%x
)
递归搜索多个驱动器号的另一种方法是将驱动器号设置为FOR循环中的变量。下面的示例将检查驱动器号是否存在,然后在整个目录中搜索zip文件。例如:

for %%i in (c:\, d:\, e:\, f:\, <enter as many as needed>) do if exist %%i (

    for /f "tokens=*" %%x in ('forfiles /p %%i /m *.zip /s /c "cmd /c echo @path"') do if exist %%x (

        %7zip% x -o"path\to\new\folder" %%x
    )
)
如果存在%%i(c:\,d:\,e:\,f:\,)中的%%i,请执行(
对于('forfiles/p%%i/m*.zip/s/c“cmd/c echo@path”')中的/f“tokens=*”%%x,如果存在,请执行%%x(
%7zip%x-o“路径\到\新\文件夹”%%x
)
)

您确定这句话“脚本检查特定文件夹(源)中的zip文件(文件名为固定值)并将其移动到另一个文件夹(目标)”吗?在我看来,该代码似乎并没有将zip文件从源移动到目标!您是否尝试过在powershell控制台或ISE中运行这四行代码,
$shell=New Object-COM shell.Application
$target=$shell.NameSpace('D:\Anlagen')
$zip=$shell.NameSpace('C:\Temp\Rechnungen\Outlook')
,以及
$target.CopyHere($zip.Items(),16)
?如果是,会发生什么?和你的描述相符吗?如果没有,为什么不呢?为什么不将存档解压缩到目标目录?解压然后移动似乎是浪费。抱歉,如果我描述我的问题混淆。脚本需要执行以下操作:脚本检测一个或多个zip文件,并将内容直接解压缩到目标文件夹。必须删除(解压obv后)zip文件,因为以后将不再使用它们。是否确定以下语句:“脚本将检查特定文件夹(源)中的zip文件(文件名为固定值)并将其移动到另一个文件夹(目标)”?在我看来,该代码似乎并没有将zip文件从源移动到目标!您是否尝试过在powershell控制台或ISE中运行这四行代码,
$shell=New Object-COM shell.Application
$target=$shell.NameSpace('D:\Anlagen')
$zip=$shell.NameSpace('C:\Temp\Rechnungen\Outlook')
,以及
$target.CopyHere($zip.Items(),16)
?如果是,会发生什么?和你的描述相符吗?如果没有,为什么不呢?为什么不将存档解压缩到目标目录?解压然后移动似乎是浪费。抱歉,如果我描述我的问题混淆。脚本需要执行以下操作:脚本检测一个或多个zip文件,并将内容直接解压缩到目标文件夹。zip文件必须被删除(在解压obv之后),因为它们以后不会被使用。“但是,在您可以使用xcopy与网络位置进行交互之前,您需要先将驱动器装载到网络使用的UNC路径。”。我不相信这是真的。我已经有一段时间没有使用
xcopy
,并且盲目地相信一位同事告诉我的。我将删除它,因为我找不到任何支持该声明的信息。您可以使用它,它肯定支持UNC路径……是的,xcopy和robocopy构建在相同的底层代码基础上。它们之间唯一真正的区别是受支持的命令行选项。然而,Robocopy是一个更有用的工具。我想补充一点,在这种情况下,两者都不是必要的。大多数解压工具允许您指定输出路径。为什么要解压然后复制呢?OP可能需要存档文件的两个副本。也许他们会回答这个主要问题,“但在使用xcopy与网络位置进行交互之前,您需要先将驱动器装载到具有网络使用的UNC路径”。我不相信这是真的。我已经有一段时间没有使用
xcopy
,并且盲目地相信一位同事告诉我的。我将删除它,因为我找不到任何支持该声明的信息。您可以使用它,它肯定支持UNC路径……是的,xcopy和robocopy构建在相同的底层代码基础上。它们之间唯一真正的区别是受支持的命令行选项。Robocopy是一个更有用的工具