Пакетный файл работает в Windows Vista;Результаты в "Файл не найден" в Windows 7 - PullRequest
1 голос
/ 11 июля 2010

Следующий пакетный файл, предназначенный для анализа каталога и отправки каждого файла в указанную программу, работает в Windows Vista x64:

@ECHO OFF

FOR /F "tokens=1,2 delims=." %%A IN ('dir /b /on *.mts') DO (
    "C:\Program Files (x86)\DGAVCDecode\DGAVCIndex.exe" -i %%A.%%B -o %%~nA.dga -f 2 -a -e
)

В Windows 7 x64 cmd возвращает «Файл не найден» - как обычный пользователь и администратор. Что происходит?

Ответы [ 5 ]

3 голосов
/ 11 июля 2010

Возможно, вы захотите использовать% PROGRAMFILES% вместо жесткого кодирования «c: \ program files» в вашем командном файле.Для 64-битных окон есть также% PROGRAMFILES (x86)%, который указывает на каталог 32-битных программных файлов.

1 голос
/ 12 июля 2010

Я вижу следующие проблемы в вашем коде:

  1. Похоже, вы используете tokens=1,2 delims=., чтобы разбить имя файла по точке на базовое имя и расширение, а затем соединить их обратно как %%A.%%B. Это не будет работать с именами файлов, которые содержат точки, потому что он захватывает только первые два токена из имени файла. Например, если имя файла foo.bar.mts , %%A.%%B расширится до foo.bar .

    Более того, это разделение / объединение на самом деле не нужно. Если вы используете цикл без каких-либо параметров синтаксического анализа, имя файла сохраняется в переменной цикла, так что вы можете просто использовать эту переменную вместо %%A.%%B.

  2. Вам необходимо заключить имена файлов, переданные в DGAVCIndex.exe, в кавычки, если они содержат пробелы.

  3. Кроме того, я второй Ларри предлагает использовать %PROGRAMFILES(x86)% вместо C: \ Program Files (x86) - никогда не повредит использовать предопределенные переменные среды вместо жесткие стандартные системные пути.

Итак, ваш код должен выглядеть так:

@echo off

for %%f in (*.mts) do (
  "%ProgramFiles(X86)%\DGAVCDecode\DGAVCIndex.exe" -i "%%~f" -o "%%~nf.dga" -f 2 -a -e
)
0 голосов
/ 12 июля 2010

Explorer имитирует некоторые каталоги, такие как «C: \ Program Files» и «C: \ Users». Когда вы используете локализованную Windows 7, каталоги имеют то же имя, но Explorer отображает что-то локализованное, например «C: \ Program» или «C: \ Bemutzer».

Не доверяйте Проводнику использовать командную строку для копирования файлов в место, которое вы хотите указать.

0 голосов
/ 11 июля 2010

Вы уверены, что имена папок верны по отношению к 32-битной и 64-битной версиям Windows 7. Вы проверили, существует ли ваш пакетный файл в месте, которое вы упомянули в файле bat.

0 голосов
/ 11 июля 2010

Это может показаться очевидным, но существует ли DGAVCIndex.exe на компьютере с Win7 в указанном месте?

...