Параметр iconv сценариев Windows - PullRequest
2 голосов
/ 30 ноября 2011

Я запускаю Gnu iconv из файла .bat в Windows Vista (извините!)

"C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO-8859-1 -t UTF-8 "%1" > "%1"

Если я позвоню

> batch.bat "S:\gutschein_info.php"

Выполняется как

> "C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO-8859-1 -t UTF-8 
  "S:\gutschein_info.php"  1> "S:\gutschein_info.php"

Тогда gutschein_info.php пуст. Откуда берется «1>»? Почему не работает?

Кстати: наконец я хотел бы преобразовать целую папку:

FOR %%i IN (%1*) DO "C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO-8859-1 -t UTF-8 %%i > %%i

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

iconv не работает, если файл input совпадает с файлом output .Так что iconv ... %1 > %1 пусто, но iconv ... %1 > utf8/%1 работает.Мой сценарий:

cd "S:\gutscheine"
S:
mkdir utf8
FOR %%i IN (*) DO "C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO-8859-1 -t UTF-8 %%i > utf8/%%i
C:
1 голос
/ 30 ноября 2011

«1>» является синонимом «>». В обоих случаях STDOUT из iconv.exe будет перенаправлен в «% 1» или «S: \ gutschein_info.php».

По сути, командная оболочка Windows запускает команды в вашем командном файле через интерпретатор и пытается превратить их в допустимые команды. Символ «>» на самом деле является ярлыком для «1>», который перенаправляет STDOUT из команды.

Аналогичное перенаправление существует для STDERR, который использует 2 вместо 1. Таким образом, для перенаправления STDERR будет использоваться «2>». Вы даже можете сделать некоторую сложную работу и перенаправить STDOUT и STDERR в файл.

"C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO-8859-1 -t UTF-8 "%1" 1> "%1" 2>&1
...