按顺序编号文件,提示输入php中的第一个数字

时间:2017-05-18 12:38:52

标签: php windows command-line filenames

php,命令行,windows。

我需要按顺序为目录中的每个 .txt 文件编号。我可以在输入脚本时在命令行的序列中指定要使用的第一个数字吗? (而不是每次手动编辑脚本本身)。

或者(更好)提示输入第一个数字两次(用于确认)?

喜欢,在命令行中(" 285603"只是一个示例数字):

c:\a\b\currentworkingdir>php c:\scripts\number.php 285603

或(甚至更好)

c:\a\b\currentworkingdir>php c:\scripts\number.php
c:\a\b\currentworkingdir>Enter first number: 
c:\a\b\currentworkingdir>Re-enter first number: 

编号脚本:

<?php
$dir = opendir('.');
// i want to enter this number OR being prompted for it to enter twice in the command line 
$i = 285603;
while (false !== ($file = readdir($dir)))
{
    if (strtolower(pathinfo($file, PATHINFO_EXTENSION)) == 'txt')
    { 
        $newName = $i . '.txt';
        rename($file, $newName);
        $i++;
    }
}
closedir($dir);
?>

有任何提示吗?

2 个答案:

答案 0 :(得分:1)

全局$argv数组中的PHP可以使用命令行参数,as described in the manual here

此数组包含脚本的名称,后跟每个进程参数。在你的情况下,当你运行:

php c:\scripts\number.php 285603

参数 285603 将作为变量$argv[1]使用。您可以用此替换$i变量,脚本将按预期工作。

答案 1 :(得分:1)

您应该使用$argv变量。它是一个数组,第一个元素表示脚本文件名,下一个元素是传递的参数。 如果您在控制台中键入php script.php 1234$argv变量如下:

array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "1234"
}

编辑:您的代码应如下所示:

<?php
# CONFIRMATION
echo 'Are you sure you want to do this [y/N]';
$confirmation = trim(fgets( STDIN));
if ($confirmation !== 'y') {
   exit (0);
}

$dir = opendir('.');
$i = $argv[1];
while (false !== ($file = readdir($dir)))
{
    if (strtolower(pathinfo($file, PATHINFO_EXTENSION)) == 'txt')
    { 
        $newName = $i . '.txt';
        rename($file, $newName);
        $i++;
    }
}
closedir($dir);
?>