Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / bat file / 20 сообщений из 20, страница 1 из 1
03.11.2009, 12:34:06
    #36287969
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Мне нужно сделать бат файлик который бы вызывал утилиту из папки windows и обрабатывал все файлы с определенным расширением в текущей папке.

Делаю примерно вот так:
for %%x in (*.dat) do C:\Windows\util.exe %%x

Но вопрос в том что util.exe сделана через одно место и я не могу им обрабатывать файлы с большими именами (>8 символов). Поэтому мне нужно переименовать все файлы в папке например в 1.dat , 2.dat etc... А после обработки переименовать обратно. Как это сделать?
...
Рейтинг: 0 / 0
03.11.2009, 12:48:30
    #36288030
GuestA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров Андрей,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
del /q unique.txt
for %%i in (*.dat) do call :processone %%i

goto end

:processone
ren % 1  unique.txt
call util unique.txt
ren output.txt % 1 .result
exit /b

:end

примерно так
...
Рейтинг: 0 / 0
03.11.2009, 13:09:51
    #36288132
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Ну получается примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET %NUM% =  1 
for %%x in (*.sql) do (
	call :ren_rew %%x, %NUM%
	set /a %NUM% = %NUM% +  1 )
cmd

:ren_rew
set %FILENAME% = % 1 
set %NUM% = % 2 
ren %FILENAME% %NUM%.sql
C:\Windows\util.exe %NUM%.sql
ren %NUM%.sq result9\%FILENAME%
exit /b

:end

Но по логу оно пчему то не присваивает вот тут set %NUM% = %2 правильное значение в переменную :-( Точнее присваивает пустоту.
...
Рейтинг: 0 / 0
03.11.2009, 20:57:56
    #36289469
Vowk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Ошибка в том, что в команде SET не должно быть пробелов вокруг знака равенства, иначе будет восприниматься как присваивание пустого значения.
Да и арифметические выражения нельзя было делать с переменными окружения в эпоху Windows NT (не знаю, как сейчас).
В общем вот работающий пример.
Я составил программу hello.exe, которая в диалоговом окне выводит командную строку (будем считать, что первый параметр):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#include <windows.h>
     int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInst,
                         LPSTR lpCmdLine, int nCmdShow )
     {
		 MessageBox(NULL,lpCmdLine,"Ïàðàìåòð",MB_OK | MB_TASKMODAL );
         return(  0  );
     }
Затем составил два BAT-файла, файл go.bat (название неважно):
Код: plaintext
1.
for %%x in (*.sql) do call go1 %%x , tmptmp.sql
и файл go1.bat:
Код: plaintext
1.
2.
3.
ren % 1  % 2 
hello.exe % 2 
ren % 2  % 1 
Вроде бы работает.
...
Рейтинг: 0 / 0
04.11.2009, 09:06:02
    #36289829
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Еще можно использовать короткие имена
http://rsdn.ru/article/winshell/batanyca.xml
http://sgw32.ucoz.ru/publ/4-1-0-1
...
Рейтинг: 0 / 0
04.11.2009, 09:10:44
    #36289835
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
VowkДа и арифметические выражения нельзя было делать с переменными окружения в эпоху Windows NT (не знаю, как сейчас).
Можно .
...
Рейтинг: 0 / 0
04.11.2009, 09:55:20
    #36289853
Vowk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Mozok,
спсб за сцылку, буду знать. Тогда приведенный пример можно переделать так, как было задумано вначале - последовательная нумерация временных файлов начиная с 1. Но все-таки тут больше вероятность совпадения имени временного файла с уже существующим.
...
Рейтинг: 0 / 0
04.11.2009, 10:05:32
    #36289862
Vowk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
belugin,
посмотрел, спасибо.
...
Рейтинг: 0 / 0
04.11.2009, 11:16:47
    #36289951
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
А что за такая уникальная утилита бородатых времён? Неужели её нельзя подыскать современный аналог?
...
Рейтинг: 0 / 0
05.11.2009, 12:37:57
    #36291864
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Спасибо - убрал пробелы но все равно не пашет.

Вот кусок лога:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
C:\Work\Rewrap>for %x in (*.sql) do (
call :ren_rew %x,  
 set /a =+ 1  
) 

C:\Work\Rewrap>(
call :ren_rew aaa.sql,  
 set /a =+ 1  
) 

C:\Work\Rewrap>set =aaa.sql 

C:\Work\Rewrap>set = 

C:\Work\Rewrap>ren  .sql 

C:\Work\Rewrap>C:\Windows\rewrap.exe .sql 

C:\Work\Rewrap>ren .sq rewrapped9\ 

C:\Work\Rewrap>exit /b 

А вот кусок бат файла:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SET %NUM%= 1 
for %%x in (*.sql) do (
	call :ren_rew %%x,%NUM%
	set /a %NUM%=%NUM%+ 1 )


:ren_rew
set %FILENAME%=% 1 
set %NUM%=% 2 
ren %FILENAME% %NUM%.sql
C:\Windows\rewrap.exe %NUM%.sql
ren %NUM%.sq rewrapped9\%FILENAME%
exit /b
...
Рейтинг: 0 / 0
05.11.2009, 13:07:10
    #36291977
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Сделал использование коротких имен. Но теперь не могу переместить получившийся файл в новую папку с нормальным именем:

Код: plaintext
1.
2.
3.
for %%x in (*.sql) do (
	C:\Windows\rewrap.exe %%~sx
	ren %%~si.SQ rewrapped9\%%x
)

Фактически здесь нужно взять 8.3 имя файла без расширения и добавить к нему .SQ

Команда: %%~si.SQ не проходит к сожалению.
...
Рейтинг: 0 / 0
05.11.2009, 14:19:03
    #36292244
GuestA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров Андрей,

Код: plaintext
1.
2.
3.
4.
5.
6.
ren /?
Переименование одного или нескольких файлов.

RENAME [диск:][путь]имя_файла1 имя_файла2.
REN [диск:][путь]имя_файла1 имя_файла2.

Для конечного файла нельзя указать другой диск или каталог.
А у вас там каталог как раз другой. Используйте move.
...
Рейтинг: 0 / 0
05.11.2009, 15:07:36
    #36292420
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Спасибо - исправил. А как насчет отрезания расширения файла?
...
Рейтинг: 0 / 0
05.11.2009, 17:15:16
    #36292906
Vowk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров АндрейСпасибо - исправил. А как насчет отрезания расширения файла?
Можно выполнить move в какую-то временный каталог, затем сделать ren *.sql *.sq в этом каталоге, затем выполнить move из временного каталога в требуемый.
...
Рейтинг: 0 / 0
05.11.2009, 18:30:38
    #36293126
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров Андрей,

спасает Виндошная справка:) :
Windows XP Help and SupportVariable substitution
Substitution modifiers for for variable references have been enhanced. The following table lists optional syntax (for any variable I).

Variable with modifier Description
%~I Expands %I which removes any surrounding quotation marks ("").
%~fI Expands %I to a fully qualified path name.
%~dI Expands %I to a drive letter only.
%~pI Expands %I to a path only.
Код: plaintext
%~nI Expands %I to a file name only. 
%~xI Expands %I to a file extension only.
%~sI Expands path to contain short names only.
%~aI Expands %I to the file attributes of file.
%~tI Expands %I to the date and time of file.
%~zI Expands %I to the size of file.
%~$PATH:I Searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, this modifier expands to the empty string.

The following table lists modifier combinations that you can use to get compound results.

Variable with combined modifiers Description
%~dpI Expands %I to a drive letter and path only.
%~nxI Expands %I to a file name and extension only.
%~fsI Expands %I to a full path name with short names only.
%~dp$PATH:I Searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found.
%~ftzaI Expands %I to an output line that is like dir.

In the above examples, you can replace %I and PATH by other valid values. A valid for variable name terminates the %~ syntax.

By use uppercase variable names such as %I, you can make your code more readable and avoid confusion with the modifiers, which are not case-sensitive.
...
Рейтинг: 0 / 0
05.11.2009, 23:35:38
    #36293537
mccc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
MozokПетров Андрей,

спасает Виндошная справка:) :
Windows XP Help and SupportVariable substitution
Substitution modifiers for for variable references have been enhanced. The following table lists optional syntax (for any variable I).

Variable with modifier Description
%~I Expands %I which removes any surrounding quotation marks ("").
%~fI Expands %I to a fully qualified path name.
%~dI Expands %I to a drive letter only.
%~pI Expands %I to a path only.
Код: plaintext
%~nI Expands %I to a file name only. 
%~xI Expands %I to a file extension only.
%~sI Expands path to contain short names only.
%~aI Expands %I to the file attributes of file.
%~tI Expands %I to the date and time of file.
%~zI Expands %I to the size of file.
%~$PATH:I Searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, this modifier expands to the empty string.

The following table lists modifier combinations that you can use to get compound results.

Variable with combined modifiers Description
%~dpI Expands %I to a drive letter and path only.
%~nxI Expands %I to a file name and extension only.
%~fsI Expands %I to a full path name with short names only.
%~dp$PATH:I Searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found.
%~ftzaI Expands %I to an output line that is like dir.

In the above examples, you can replace %I and PATH by other valid values. A valid for variable name terminates the %~ syntax.

By use uppercase variable names such as %I, you can make your code more readable and avoid confusion with the modifiers, which are not case-sensitive.

чтобы каждый раз не лезть в нелр и часто определить "короткое имя":

-- CMDParams.cmd
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
@echo off

echo.

echo    %%~i         - expands %%i removing any surrounding quotes (")
echo    %%~fi        - expands %%i to a fully qualified path name
echo    %%~di        - expands %%i to a drive letter only
echo    %%~pi        - expands %%i to a path only
echo    %%~ni        - expands %%i to a file name only
echo    %%~xi        - expands %%i to a file extension only
echo.
echo    %%~si        - expanded path contains short names only
echo    %%~ai        - expands %%1 to file attributes
echo    %%~ti        - expands %%1 to date/time of file
echo    %%~zi        - expands %%1 to size of file
echo.
echo    %%~dpi       - expands %%i to a drive letter and path only
echo    %%~nxi       - expands %%i to a file name and extension only

echo.
echo.

echo    ┌-------------------------┐
echo    │Sample:   CmdParams [%%1] │
echo    └-------------------------┘

echo.
if "%~ 1 "=="" goto EX
echo.


@rem ---------------------------------------------------------------
echo    %%~ 1      - %~ 1 
rem goto EX

echo    %%~f1    - %~f1
echo    %%~d1    - %~d1
echo    %%~p1    - %~p1
echo    %%~n1    - %~n1
echo    %%~x1    - %~x1
echo.
echo    %%~s1    - %~s1
echo    %%~a1    - %~a1
echo    %%~t1    - %~t1
echo    %%~z1    - %~z1
echo.
echo    %%~dp1   - %~dp1
echo    %%~nx1   - %~nx1
@rem ---------------------------------------------------------------


echo.
echo.
:EX
@pause>nul
...
Рейтинг: 0 / 0
12.11.2009, 17:45:25
    #36307418
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Итак вот что получаем в итоге:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
del *.sq
md rewrapped9
del rewrapped9\*.sql
ren *.plb *.sql
ren *.pck *.sql
for %%x in (*.sql) do (
	C:\Windows\rewrap.exe %%~sx
	move *.sq rewrapped9
	cd rewrapped9
	For %%y in (*.sq) do (ren %%y %%x)
	cd ..
	)

del REWRAP.DBF
del REWRAP.NTX
del REWRAP.PRT
cmd

:end
...
Рейтинг: 0 / 0
12.11.2009, 23:28:33
    #36307996
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров Андрей,

А чем плох такой вариант?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
del *.sq
md rewrapped9
del rewrapped9\*.sql
ren *.plb *.sql
ren *.pck *.sql
for %%x in (*.sql) do (
	C:\Windows\rewrap.exe %%~sx
	ren %%~nx.sq %%~nx.sql 
	)

del REWRAP.DBF
del REWRAP.NTX
del REWRAP.PRT
cmd

:end
...
Рейтинг: 0 / 0
13.11.2009, 11:59:17
    #36308808
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Тем что
1) В программу передается имя из 8 символов (короткое)
2) тем что файлы надо класть в отдельную папку
...
Рейтинг: 0 / 0
13.11.2009, 17:42:18
    #36309972
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bat file
Петров Андрей,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
del *.sq
rd /S /Q rewrapped9
md rewrapped9
ren *.plb *.sql
ren *.pck *.sql
for %%X in (*.sql) do (
	C:\Windows\rewrap.exe %%~sX
	move %%~snX.sq rewrapped9
	)

del REWRAP.DBF
del REWRAP.NTX
del REWRAP.PRT
cmd

:end
Вот так вот хотелось?
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / bat file / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]