powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / bat file
20 сообщений из 20, страница 1 из 1
bat file
    #36287969
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно сделать бат файлик который бы вызывал утилиту из папки windows и обрабатывал все файлы с определенным расширением в текущей папке.

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

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

Код: 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
bat file
    #36288132
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну получается примерно следующее:

Код: 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
bat file
    #36289469
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в том, что в команде 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
bat file
    #36289829
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно использовать короткие имена
http://rsdn.ru/article/winshell/batanyca.xml
http://sgw32.ucoz.ru/publ/4-1-0-1
...
Рейтинг: 0 / 0
bat file
    #36289835
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkДа и арифметические выражения нельзя было делать с переменными окружения в эпоху Windows NT (не знаю, как сейчас).
Можно .
...
Рейтинг: 0 / 0
bat file
    #36289853
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,
спсб за сцылку, буду знать. Тогда приведенный пример можно переделать так, как было задумано вначале - последовательная нумерация временных файлов начиная с 1. Но все-таки тут больше вероятность совпадения имени временного файла с уже существующим.
...
Рейтинг: 0 / 0
bat file
    #36289862
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin,
посмотрел, спасибо.
...
Рейтинг: 0 / 0
bat file
    #36289951
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за такая уникальная утилита бородатых времён? Неужели её нельзя подыскать современный аналог?
...
Рейтинг: 0 / 0
bat file
    #36291864
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо - убрал пробелы но все равно не пашет.

Вот кусок лога:
Код: 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
bat file
    #36291977
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал использование коротких имен. Но теперь не могу переместить получившийся файл в новую папку с нормальным именем:

Код: 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
bat file
    #36292244
GuestA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петров Андрей,

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

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

Для конечного файла нельзя указать другой диск или каталог.
А у вас там каталог как раз другой. Используйте move.
...
Рейтинг: 0 / 0
bat file
    #36292420
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо - исправил. А как насчет отрезания расширения файла?
...
Рейтинг: 0 / 0
bat file
    #36292906
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров АндрейСпасибо - исправил. А как насчет отрезания расширения файла?
Можно выполнить move в какую-то временный каталог, затем сделать ren *.sql *.sq в этом каталоге, затем выполнить move из временного каталога в требуемый.
...
Рейтинг: 0 / 0
bat file
    #36293126
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.
...
Рейтинг: 0 / 0
bat file
    #36293537
Фотография mccc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
bat file
    #36307418
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак вот что получаем в итоге:

Код: 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
bat file
    #36307996
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

А чем плох такой вариант?
Код: 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
bat file
    #36308808
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем что
1) В программу передается имя из 8 символов (короткое)
2) тем что файлы надо класть в отдельную папку
...
Рейтинг: 0 / 0
bat file
    #36309972
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

Код: 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
20 сообщений из 20, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / bat file
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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