Избегание «не распознается как внутренняя или внешняя команда» при запуске сценария .bat с Powershell - PullRequest
0 голосов
/ 30 октября 2019

Я написал базовый сценарий .bat, который вы можете найти ниже:

@echo off
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
    param([string]$zipfile, [string]$outpath)
    [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
$import="E:\directory\import"
cd $import
Unzip $import\file1.zip $import\extract\
Unzip $import\file2.zip $import\extract\
Unzip $import\file3.zip $import\extract\

Когда я запускаю эти командные строки непосредственно в терминал PowerShell (путем копирования-вставки), он работает нормально!

Но когда я сохраняю все эти командные строки в "test.bat" и - затем - запускаю этот файл .bat, он не работает:

Errors messages

Извините, сообщения об ошибках на французском языке, но это означает, что "не распознается как внутренняя или внешняя команда, исполняемая программа или командный файл" для каждой командной строки.

Я пытался запустить.bat файл разными способами:

  1. .\test.bat прямо в каталог с терминала PowerShell

  2. [FULL_PATH]\test.bat

  3. powershell E:\directory\import\test.bat из приложения CMD

  4. C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe E:\directory\import\test.bat из приложения CMD

  5. И т. Д.

И я все еще получаю те же сообщения об ошибках.

Вы можете найти под моей конфигурацией пути:

Path config

1 Ответ

0 голосов
/ 30 октября 2019

Вы смешиваете пакетные сценарии и сценарии PowerShell. Вам нужно сохранить ваш скрипт как файл .ps1 вместо .bat и удалить все команды только для cmd.

test.ps1

Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
    param([string]$zipfile, [string]$outpath)
    [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
$import="E:\directory\import"
cd $import
Unzip $import\file1.zip $import\extract\
Unzip $import\file2.zip $import\extract\
Unzip $import\file3.zip $import\extract\

Причина, по которой это работает при вставке копии, заключается в том, что каждая команда интерпретируется независимо и поэтому может использовать разные интерпретаторы. Однако в сценарии это не тот случай, когда терминал должен решить, какой интерпретатор использовать. Основываясь на расширении файла, он выбирает cmd. Это только позволяет @echo off работать, а все остальное не удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...